Spread trading dans Meta Trader - page 31

 
neoclassic >>:

Продавая USDCAD и покупая DX вы покупаете индекс канадца. На поведение индекса можно посмотреть с помощью того же СС - его динамика ничем не отличается от других индексов. Так что такая торговля на мой взгляд - будет 50/50.


C'est possible ! Je ne vais pas discuter.

Nous allons donc continuer à chercher. Je cherche d'autres outils appropriés.

Au fait. Hier, près de la fin de la négociation sur l'indice Fduch, j'ai entré (BUY ZC + SELL ZW).

Maintenant il y a {+300 pips (maïs) -175 pips (blé) }

 
neoclassic >>:

Продавая USDCAD и покупая DX вы покупаете индекс канадца. На поведение индекса можно посмотреть с помощью того же СС - его динамика ничем не отличается от других индексов. Так что такая торговля на мой взгляд - будет 50/50.


Veuillez ensuite calculer la formule de l'indice canadien. Si elle existe, bien sûr ;))) ... En fait, il est préférable de prendre bien sûr l'eur en "tandem". Comme il a plus de poids dans l'indice. Il suffit de mettre un signe moins dans la formule de l'indy pour son affichage normal. Et pouvez-vous nous dire comment vous calculez le coefficient du "tandem", c'est-à-dire le poids des paires dans l'opération ?

 

Je n'ai pas encore fait de calculs sérieux. C'est-à-dire - jusqu'à présent, à l'œil, - en gros.

Pour (Dax/Futsi) - le rapport des lots 1,2/3 et delta pas moins de 200 T, - j'ai déduit à la suite de nombreuses semaines d'observation.

EURIPY+USDJPY - Je prends les mêmes tailles de lot. Pendant 2,5 semaines de travail en ligne (delta = 20-30 pips), ce "hedge" n'a pas passé plus de 2-3 jours.

Je l'ai clôturé avec un profit total de 5 à 20 pips.

 
"Surveillance de plusieurs semaines" ? Ne serait-il pas plus facile de simplement collecter des données ?
 

Peu probable que ça marche. "Crazy Dax"(c) et "Pretty Footsie"(c) dans la "version discutée" sont négociés sur des plateformes différentes.

Futsi commence une heure plus tard que Dax sur une base quotidienne. De plus, il y a un certain nombre de jours dans l'histoire où le dax était négocié et le futsi était "éteint", ou vice versa. L'histoire de ces instruments est donc décalée plusieurs fois les uns par rapport aux autres et, pour cette raison, elle est peu crédible.

 
rid >>:

Вряд ли получится. "Бешеный Дакс"(с) и "красотка Футси"(с) в "обсуждаемом варианте" торгуются на разных площадках.

Ежедневно футси стартует на час позже дакса. Более того, на истории достаточно много дней, когда дакс торговался, а футси был(а) "на выходных", или наоборот. Так что, история этих инструментов многократно сдвинута относительно др-друга и, по этой причине, мало достоверна.

C'est bien. Nous ne jouerons jamais mieux que les grands oncles sur leur terrain. Et sur un terrain comme celui-ci, les grands oncles n'ont rien à faire.

C'est notre pain et notre beurre.

 
Fduch >>:
По открытиям баров

Je suis en train de créer un EA de "quasi-arbitrage" qui peut être exécuté dans le testeur sur les deux instruments de "couverture" avec des transactions virtuelles simulées sur le deuxième symbole.

Il y a une question.

Veuillez me conseiller.

Comment modifier votre fonction

//--------------------------------------------------------------------+
//ФУНКЦИЯ РАСЧЕТА СРЕДНЕСТАТ.СПРЕДА                    |
//--------------------------------------------------------------------+               
  double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;   double N = 0;   double Sum = 0;
   for( k = 0; k < iBars( Symbol_1, Timeframe); k++)
   {
      if( N == NBars)          break;

      int symb2Shift = iBarShift( Symbol_2, Timeframe,iTime( Symbol_1, Timeframe, k),true);
      if( symb2Shift != -1)
      {
         Sum += iClose( Symbol_1, Timeframe, k) - iClose( Symbol_2, Timeframe, symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return( avarageSpread);
}

Il ne retournerait pas l'écart moyen des derniers NBars ?

Mais pour l'avant-dernier NBars.

C'est-à-dire pour une période allant de la(2*NBars)-ème barre à la NBars?

Question à tous ceux qui peuvent répondre.

Parce que je suis assis ici, je n'arrive pas à comprendre.

 
//--------------------------------------------------------------------+
//ФУНКЦИЯ РАСЧЕТА СРЕДНЕСТАТ.СПРЕДА                    |
//--------------------------------------------------------------------+               
  double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;   double N = 0;   double Sum = 0;
   for( k = NBars; k < iBars( Symbol_1, Timeframe); k++)
   {
      if( N == NBars)          break;

      int symb2Shift = iBarShift( Symbol_2, Timeframe,iTime( Symbol_1, Timeframe, k),true);
      if( symb2Shift != -1)
      {
         Sum += iClose( Symbol_1, Timeframe, k) - iClose( Symbol_2, Timeframe, symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return( avarageSpread);
}
 

Merci, getch! Je vais le mettre en action maintenant.

Il s'est avéré plus facile de mettre en œuvre des transactions virtuelles du deuxième instrument de couverture dans le testeur que je ne le pensais initialement.

J'ai construit le travail par les prix d'ouverture parce que le testeur ne renvoie pas MarketInfo(Symbol_2,MODE_BID) Bids et Asks ; mais les prix d'ouverture et de clôture sont renvoyés par le testeur normalement.

Maintenant je le teste avec tf=m1 pour une meilleure précision

Pour ceux qui sont intéressés et qui en ont besoin, voici des fragments de la solution de notre programme (rid+leonid553).

Ouverture de couverture d'un type (c'est-à-dire vente1+by2) :

Je serais heureux de recevoir des commentaires critiques.

double POINT_1 = MarketInfo( Symbol_1,MODE_POINT); 
double POINT_2 = MarketInfo( Symbol_2,MODE_POINT); 

double  Close_Symbol_1 = iClose( Symbol_1,Period(),1); 
double  Close_Symbol_2 = iClose( Symbol_2,Period(),1);
//-----------------------------------------------------



if ( TradeUP==true && флаг1==0) {//если условия первого хеджа
//соответствуют заданным  
//продаем 1-й символ и покупаем второй символ 
//-------------------------------------
if(Symbol()!= Symbol_2 && IsTesting() == True) {//при тестировании 2-го
// инструмента команду  не выполняем !
if ( NumberOfPositions( Symbol_1,OP_SELL, Magic)<1  ){//нет поз селл по 1-му символу
 SL=0; TP=0;
if( StopLoss>0)   SL= Bid_1+ POINT_1* StopLoss;
if( TakeProfit>0) TP= Bid_1- POINT_1* TakeProfit; 
ti= OpenPosition( Symbol_1, OP_SELL, Lots_1,0 ,0, Magic);
if (OrderSelect( ti, SELECT_BY_TICKET))
 ModifyOrder(-1, SL, TP, clModifySell);  
    }
                   }//if (IsTesting() == True)
//--------------------------------------
if(Symbol()!= Symbol_1 && IsTesting() == True) {//при тестировании 1-го
// инструмента команду не выполняем !
 if ( NumberOfPositions( Symbol_2,OP_BUY, Magic)<1) { //нет  поз бай по 2-му символу 
   SL=0; TP=0;
if( StopLoss>0)   SL= Bid_2- POINT_2* StopLoss;
if( TakeProfit>0) TP= Ask_2+ POINT_2* TakeProfit;   
ti= OpenPosition( Symbol_2, OP_BUY, Lots_2,0,0, Magic);
if (OrderSelect( ti, SELECT_BY_TICKET))
  ModifyOrder(-1, SL, TP, clModifyBuy); 
          }
                         }//if (IsTesting() == True) {         
//--------------------------------------------------                                                    
                                 } //если условия соответствуют заданным

Ensuite, en fait - le mécanisme des transactions virtuelles lui-même dans le bloc de clôture "hedge" :

 

Ensuite, le mécanisme de transaction virtuelle lui-même dans le bloc de clôture "hedge" :

La clôture et le calcul du bénéfice total sont probablement d'une importance capitale ici !

if ( Symbol()== Symbol_1 ){//если прогоняем  1-го инструмент
//--------------Закрываем первый хедж -----------------------------------
//задаем и вычисляем номер бара открытия реальной селл 1-го 
//инструмента - с магиком 1
int N_of_barOP_SELL_1 = NumberOfBarOpenLastPos( Symbol_1,0,OP_SELL, Magic);
//задаем цену открытия этого бара на 2-м инстр., равную  цене открытия 
//виртуальной поз.BUY на втором иструменте(магик)
double OpenBUY_Symbol_2=iOpen( Symbol_2,Period(), N_of_barOP_SELL_1);


if (    ( ( PriceOpenLastPos( Symbol_1,OP_SELL, Magic)- Close_Symbol_1) +
        ( Close_Symbol_2- OpenBUY_Symbol_2) )  >=  CloseProfit* POINT_1 ){
 //если суммарный профит реальной сделки селл 1-го
// инструмента и "виртуальный" профит сделки Бай 2-го
// инструмента (хеджа TradeUP) по факту больше заданного
//значения, то - закрываем реальную OP_SELL 1-го символа и
// виртуальную OP_BUY второго символа
        ClosePosFirstProfit( Symbol_1,OP_SELL, Magic);
        if (IsTesting() != True){// при тестировании команду не выполняем ! 
        ClosePosFirstProfit( Symbol_2, OP_BUY, Magic);
                                  }
                         }
//------------ Закрываем второй хедж -------------------------------------
      аналогично
//----------------------------------------------                          
                         }//if ( Symbol()== Symbol_1 ){

C'est tout ce qu'il y a à faire...

De la même manière que nous faisons la fermeture du deuxième instrument dans une exécution de test(if ( Symbol()== Symbol_2 )

Utilisé f-et Igor Kim(chapeau bas à lui) :

OpenPosition(); - ouverture d'une pose.

ModifyOrder(); - modification des positions.

NumberOfPositions() - nombre de positions

PriceOpenLastPos() - prix ouvert de la dernière position

ClosePosFirstProfit() - fermeture des positions

NumberOfBarOpenLastPos() - renvoie le nombre de barres de la dernière position ouverte


Raison: