Spread trading in Meta Trader - pagina 31

 
neoclassic >>:

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


È possibile! Non ho intenzione di discutere.

Quindi continueremo a cercare. Alla ricerca di altri strumenti adatti.

A proposito. Ieri verso la fine delle negoziazioni sull'indice Fduch sono entrato (BUY ZC + SELL ZW)

Ora c'è {+300 pips (mais) -175 pips (grano) }

 
neoclassic >>:

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


Poi, per favore, calcola la formula dell'indice canadese. Se esiste, naturalmente ))) ... In realtà rid, è meglio prendere naturalmente l'eur in "tandem". Poiché ha più peso nell'indice. Basta mettere un segno meno nella formula dell'indy per la sua visualizzazione normale. E potete condividere come calcolate il coefficiente per il "tandem", cioè il peso delle coppie nell'affare?

 

Non ho ancora fatto calcoli seri. Cioè - finora a occhio, - all'incirca.

Per (Dax/Futsi) - il rapporto dei lotti 1.2/3 e delta non meno di 200 T, - ho dedotto come risultato di molte settimane di osservazione.

EURIPY+USDJPY - prendo le stesse dimensioni di lotto. Per 2,5 settimane di lavoro online (delta = 20-30 pips) questa "copertura" non ha passato più di 2-3 giorni.

L'ho chiuso con un profitto totale da 5 a 20 pip.

 
"Sorveglianza di più settimane"? Non sarebbe più semplice raccogliere dati?
 

Improbabile che funzioni. " Crazy Dax"(c) e "Pretty Footsie"(c) nella "versione discussa" sono scambiati su piattaforme diverse.

Futsi inizia un'ora più tardi di Dax ogni giorno. Inoltre, ci sono parecchi giorni nella storia in cui il dax era scambiato e il futsi era "spento", o viceversa. Quindi, la storia di questi strumenti è spostata molte volte l'una rispetto all'altra e, per questo motivo, ha poca credibilità.

 
rid >>:

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

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

Va bene. Non giocheremo mai meglio dei grandi zii sul loro campo. E su un campo come questo, i grandi zii non hanno affari.

Questo è il nostro pane quotidiano.

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

Sto realizzando un EA "quasi-arbitraggio" che può essere eseguito nel tester su entrambi gli strumenti "hedge" con operazioni virtuali simulate sul 2° simbolo.

C'è una domanda.

Si prega di avvisare.

Come posso cambiare la vostra funzione

//--------------------------------------------------------------------+
//ФУНКЦИЯ РАСЧЕТА СРЕДНЕСТАТ.СПРЕДА                    |
//--------------------------------------------------------------------+               
  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);
}

Non restituirebbe lo spread medio dell'ultimo NBars ?

Ma per il penultimo NBars.

Cioè per un periodo da(2*NBars)-sima barra alla NBars?

Domanda a tutti coloro che possono rispondere.

Perché sono seduto qui e non riesco a capirlo.

 
//--------------------------------------------------------------------+
//ФУНКЦИЯ РАСЧЕТА СРЕДНЕСТАТ.СПРЕДА                    |
//--------------------------------------------------------------------+               
  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);
}
 

Grazie, getch! Lo metterò in azione ora.

Si è rivelato più facile implementare i trade virtuali del secondo strumento di copertura nel tester di quanto pensassi inizialmente.

Ho costruito il lavoro con i prezzi di apertura perché il tester non restituisce MarketInfo(Symbol_2,MODE_BID) Bids e Asks; ma i prezzi di apertura e chiusura sono restituiti dal tester normalmente.

Ora lo provo con tf=m1 per una migliore precisione

Per coloro che sono interessati e che ne hanno bisogno, ecco i frammenti della nostra soluzione del programma (rid+leonid553).

Apertura di copertura di 1 tipo (cioè sell1+by2) :

Sarei felice di ricevere commenti critici.

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) {         
//--------------------------------------------------                                                    
                                 } //если условия соответствуют заданным

In seguito, in realtà - il meccanismo di scambi virtuali stesso nel blocco di chiusura "hedge":

 

Poi, il meccanismo di transazione virtuale stesso nel blocco "chiusura della copertura":

La chiusura e il calcolo del profitto totale è probabilmente di fondamentale importanza qui!

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 ){

Non c'è altro da dire...

Allo stesso modo facciamo la chiusura del secondo strumento in un'esecuzione del tester(if ( Symbol()== Symbol_2 )

Usato f-e Igor Kim(tanto di cappello) :

OpenPosition(); - aprire una posa.

ModifyOrder(); - modifica delle posizioni.

NumberOfPositions() - numero di posizioni

PriceOpenLastPos() - prezzo aperto dell'ultima posizione

ClosePosFirstProfit() - chiusura delle posizioni

NumberOfBarOpenLastPos() - restituisce il numero di barra dell'ultima posizione aperta