[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 161

 
Образовалась следующая ситуация: тестер стратегий не закрывает позиции по TakeProfit. Торговля ведется по TF Day, смотрел более мелкие TF по убыточным сделкам - цена опускается\поднимается на более чем нужный уровень для срабатывания TakeProfit, но сделка не закрывается, а когда цена доходит до StopLoss, то фиксируется убыток. Уже даже запускал визуализацию - чудеса какие-то, цена просто проходит мимо TakeProfit и все. Причем иногда все работает, а иногда вот такие вещи появляются. Буквально вчера все было нормально, сегодня запустил тестер и результативность советника стала никакая. Пробовал переустанавливать терминал - не помогло. Может в другой ДЦ???
 
beginner666999:
Образовалась следующая ситуация: тестер стратегий не закрывает позиции по TakeProfit. Торговля ведется по TF Day, смотрел более мелкие TF по убыточным сделкам - цена опускается\поднимается на более чем нужный уровень для срабатывания TakeProfit, но сделка не закрывается, а когда цена доходит до StopLoss, то фиксируется убыток. Уже даже запускал визуализацию - чудеса какие-то, цена просто проходит мимо TakeProfit и все. Причем иногда все работает, а иногда вот такие вещи появляются. Буквально вчера все было нормально, сегодня запустил тестер и результативность советника стала никакая. Пробовал переустанавливать терминал - не помогло. Может в другой ДЦ???

Все дело в спреде, на выходные он увеличен.

Как-то так. 

 
r772ra:

Все дело в спреде, на выходные он увеличен.

Как-то так. 


Спасибо! Буду ждать будней, чтобы проверить. 
 
r772ra:

Все дело в спреде, на выходные он увеличен.

Как-то так. 


Это же надо быть таким дебилом - посмотрел на сайте ДЦ размер спреда на своем инструменте и офигел - аж 11 пунктов! Еще раз спасибо!
 
Тогда еще вопрос, немного не в тему. Для чего спред увеличивают в выходные? Ведь все равно торговля не ведется.
 
Konstebl:

Подскажите,пожалуйста,как правильно написать условие.Если есть открытые ордера BUY,если они в безубытке,тогда выставляем ордер BUYSTOP.Написал вот так:

  static bool flag ;

   if(NewBar())

     flag = true;    

          for(i=0;i<total;i++)

             {

             OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 

             if(OrderSymbol()==Symbol() && OrderMagicNumber()==123)

                {

                if(OrderType()==OP_BUY)

                   {

                   if(OrderStopLoss()>OrderOpenPrice())

                      {

                      if(Ask>m && frUP>0 && flag)

                         {                

                        price = NormalizeDouble(frUP+(Ask-Bid)+30*Point,Digits);

                        takeprofit = NormalizeDouble(price+tp*Point,Digits);

                        ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,Bid-sl*Point,takeprofit,"Fractal",123,TimeCurrent()+72000,Blue);

                       if(ticket>0)

                        flag = false;

                       else

                        Print("Ошибка ",GetLastError());

                      }

                   }

                }

             }

          }

не работает!!! 


А фигурные скобки не пробовали согласно логики расставить?  А то пока никакой нет.

То что написано подразумевает что открыта хотя бы одна позиция. Иначе новых открывать не будет

 
Vinin:


А фигурные скобки не пробовали согласно логики расставить?  А то пока никакой нет.

То что написано подразумевает что открыта хотя бы одна позиция. Иначе новых открывать не будет


И как их расставить?Немного код дописал:

 

 if(NewBar())

     flag = true;    

          for(i=0;i<total;i++)

             {

             OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 

             if(OrderSymbol()==Symbol() && OrderMagicNumber()==123)

                {

                if(OrderType()==OP_BUY || OrderType()<=OP_BUYSTOP)

                   {

                   if(OrderStopLoss()>OrderOpenPrice())

                      {

                      if(Ask>m && frUP>0 && flag)

                         {                

                        price = NormalizeDouble(frUP+(Ask-Bid)+30*Point,Digits);

                        takeprofit = NormalizeDouble(price+tp*Point,Digits);

                        ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,Bid-sl*Point,takeprofit,"Fractal",123,TimeCurrent()+72000,Blue);

                       if(ticket>0)

                        flag = false;

                       else

                        Print("Ошибка ",GetLastError());

                      }

                   }

                }

             }

          }
По идее должно работать,но не хочет.
 
beginner666999:
Тогда еще вопрос, немного не в тему. Для чего спред увеличивают в выходные? Ведь все равно торговля не ведется.

Нет, не на выходные, не совсем правильно я написал, Спред остается в терминале по последней пришедшей котировке

Т.е. Закрываете терминал в течение дня, пятниницы. И тестируйте в выходные.

 
r772ra:

Нет, не на выходные, не совсем правильно я написал, Спред остается в терминале по последней пришедшей котировке

Т.е. Закрываете терминал в течение дня, пятниницы. И тестируйте в выходные.

 

 


Понял, спасибо! Так гораздо логичней. 
 
Konstebl:


И как их расставить?Немного код дописал:

 


Ладно, немного приведу в лад с логикой

if(NewBar())
    flag = true;    
for(i=0;i<total;i++) {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES); 
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==123) {
    if(OrderType()==OP_BUY || OrderType()<=OP_BUYSTOP) {
        if(OrderStopLoss()>OrderOpenPrice()) {
            if(Ask>m && frUP>0 && flag) {                
                price = NormalizeDouble(frUP+(Ask-Bid)+30*Point,Digits);
                takeprofit = NormalizeDouble(price+tp*Point,Digits);
                ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,Bid-sl*Point,takeprofit,"Fractal",123,TimeCurrent()+72000,Blue);
                if(ticket>0)
                    flag = false;
                else
                    Print("Ошибка ",GetLastError());
            }
        }
    }
}

          }

 Цикл выполняется вне зависимости от от условия if(NewBar())