Торговля спредами в Meta Trader-е - страница 31

 
neoclassic >>:

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


Возможно! Не буду спорить. 

Значит, будем смотреть дальше. Искать другие подходящие инструменты.

Кстати. Вчера ближе к концу торгов  по индюку Fduch-a     вошёл  (BUY ZC + SELL ZW)

Сейчас имеется {+300 пипсов (кукуруза) -175 пипсов (пшеница) }

 
neoclassic >>:

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


Тогда, плиз, расчет формулы индекса канадца. Если он существует, конечно же ))) ... на самом деле rid, лучше брать конечно евру в "тандеме". Т.к. она имеет больший вес в индексе. Просто поставь знак минус в формуле индюка для его нормального отображения. И ожешь поделиться как ты расчитываешь коэффициент для "тандема", ну т.е. вес пар в сделке?

 

Да никак пока серьезно не расчитываю. Т.е. - пока на глазок, - прикидочно. 

Для (дакс/футси) - соотношение лотов 1.2/3 и дельта не менее 200-т, - я вывел в результате многонедельного наблюдения.

EURIPY+USDJPY, - беру одинаковые размеры лотов. За 2.5 недели работы в онлайне (при дельте=20-30 пипсов) - больше 2-3-х суток этот "хедж" пока ещё не пересиживался.

Закрывал его при суммарном профите от 5 до 20 пипсов.

 
"Многонедельного наблюдения" ? Не проще ли просто собрать данные?
 

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

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

 
rid >>:

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

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

 Вот и прекрасно. Мы же никогда не будем играть лучше "больших дядей" на их поле. А на таком поле "большим дядям" делать нечего.

Это наш хлеб.

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

Доделываю сейчас "квазиарбитражного" советника, которого можно прогонять в тестере по обоим инструментам "хеджа" с имитацией виртуальных сделок по 2-му символу.

Встал вопрос.

Пож., подскажи.

Как изменить твою функцию 

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

Чтобы она возвращала средний спред не за последние NBars баров ?

А за предпоследние NBars баров.

Т.е. за период с (2*NBars)-го бара до NBars-го бара?

Вопрос ко всем, кто сумеет ответить.

А то я тут сижу никак не соображу.

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

Благодарю, getch ! Сейчас задействую.

Реализовать в тестере виртуальные сделки второго инструмента "хеджа"  оказалось проще, чем я предполагал изначально.

Работу я построил по ценам открытия, т.к. тестер не возвращает биды и аски MarketInfo(Symbol_2,MODE_BID); а цены открытия, закрытия тестер возвращает нормально.

Для большей точности тестирую сейчас на тф=м1

Для тех, - кому интересно и кому нужно - выставляем  фрагменты нашего (rid+leonid553)  программного решения.

Открытие хеджа 1 типа (т.е. селл1+бай2) :

Буду рад критическим замечаниям.

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

Далее, собственно, - сам механизм виртуальных сделок в блоке закрытия закрытия "хеджа" :

 

Далее, собственно, - сам механизм виртуальных сделок в блоке закрытия закрытия "хеджа" :

Закрытие и расчет суммарной прибыли здесь, пожалуй имеет ключевое значение!

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

Вот собственно и всё...

Аналогично делаем  закрытие на тестерном прогоне второго инструмента (if ( Symbol()== Symbol_2 )

Задействованы ф-и Игоря Кима (низкий поклон ему) :

OpenPosition(); - открытие поз.

ModifyOrder() - модификация стопов

NumberOfPositions() - количество позиций

PriceOpenLastPos() - цена открытия посл. позиции

ClosePosFirstProfit() - закрытие позиций

NumberOfBarOpenLastPos() - возвращает номер бара открытия посл. пизиции