SOS! HELP!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maksim Neimerik
31908
Maksim Neimerik  
Привет форумчане! Помогите разобраться: написал вот такую функцию
void MartinOrder()
  {
   datetime t=0;
   int ticket1=0,j=-1,i;
   for(i=0;i<OrdersHistoryTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic&&t<OrderCloseTime())
           {
               t=OrderCloseTime();
               j=i;
           }
        }
     }
   if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
   {
      if(OrderType()==OP_BUY)
        {
         if((OrderProfit()+OrderCommission()+OrderSwap())<0&&OrdersTotal()==0)
           {
            ticket1=OrderSend(Symbol(),OP_SELL,OrderLots()*Multiplier,Bid,slippage,Ask+SL,Ask-TP,CommentOrder,magic,0,Red);
            if(ticket1<0)
              {
                Print("Ошибка открытия Селл ордера по Мартину = ",GetLastError());
              }
           }
        }
      if(OrderType()==OP_SELL)
        {
         if((OrderProfit()+OrderCommission()+OrderSwap())<0&&OrdersTotal()==0)
           {
            ticket1=OrderSend(Symbol(),OP_BUY,OrderLots()*Multiplier,Ask,slippage,Bid-SL,Bid+TP,CommentOrder,magic,0,Blue);
            if(ticket1<0)
              {
                Print("Ошибка открытия Бай ордера по Мартину = ",GetLastError());
              }
           }
         }
       }
     }  
но почему-то она работает только в тестере! Пробовал на демо аккаунте - не работает! Где собака зарыта?
Ihor Herasko
21908
Ihor Herasko  
Maksim Neimerik:
Привет форумчане! Помогите разобраться: написал вот такую функциюно почему-то она работает только в тестере! Пробовал на демо аккаунте - не работает! Где собака зарыта?

А словами можно описать, что требуется и в чем проявляется нерабостоспособность онлайн?

По коду выходит так, что в первом цикле находится ордер по текущему символу с заданным магиком и наибольшим временем закрытия. То есть последний закрытый ордер. Если такой ордер найден, то открывается противоположный ордер с объемом, умноженным на Multiplier.

И точно советник работает на счете один и не открываются ордера вручную? Ведь вот это условие "некрасивое":

if((OrderProfit()+OrderCommission()+OrderSwap())<0&&OrdersTotal()==0)
Igor Makanu
9931
Igor Makanu  
Maksim Neimerik:
 Где собака зарыта?

1. история в терминале сколько дней? (правой мышей в терминале в окне истории ордеров)

2. нет нормализации лота

3. нет нормализации цен при открытии ордера

4. нет обработки ситуации "нет ордера в истории"

ЗЫ: я обычно такие задачи разбиваю на несколько этапов:

- пишу функцию поиска последнего ордера, которая вернет объем и тип последнего ордера (можно в качестве флага убытка вернуть отрицательную величину, если был прибыльный ордер - то вернуть положительный обьем ордера)

- выставляю ордер в соответсвии с логикой ТС

Пользовательский интерфейс - Начало работы - MetaTrader 5
Пользовательский интерфейс - Начало работы - MetaTrader 5
  • www.metatrader5.com
Интерфейс платформы предоставляет доступ ко всем инструментам, необходимым для торговли на финансовых рынках. Он включает в себя различные меню, панели инструментов и служебные окна. Главное меню В главном меню собраны практически все команды и функции, которые можно выполнять в торговой платформе. Оно позволяет работать с графиками...
Maksim Neimerik
31908
Maksim Neimerik  
Ihor Herasko:

А словами можно описать, что требуется и в чем проявляется нерабостоспособность онлайн?

По коду выходит так, что в первом цикле находится ордер по текущему символу с заданным магиком и наибольшим временем закрытия. То есть последний закрытый ордер. Если такой ордер найден, то открывается противоположный ордер с объемом, умноженным на Multiplier.

Все верно, так и есть. Но не могу понять почему на демо не работает....

Renat Akhtyamov
16193
Renat Akhtyamov  
Maksim Neimerik:

Все верно, так и есть. Но не могу понять почему на демо не работает....

Вот это

OrdersHistoryTotal()

требует сначала ручками выбрать период отражения закрытых ордеров

Maksim Neimerik
31908
Maksim Neimerik  
Igor Makanu:

1. история в терминале сколько дней? (правой мышей в терминале в окне истории ордеров)

2. нет нормализации лота

3. нет нормализации цен при открытии ордера

4. нет обработки ситуации "нет ордера в истории"

ЗЫ: я обычно такие задачи разбиваю на несколько этапов:

- пишу функцию поиска последнего ордера, которая вернет объем последнего ордера (можно в качестве флага убытка вернуть отрицательную величину, если был прибыльный ордер - то вернуть положительный обьем ордера)

- выставляю ордер в соответсвии с логикой ТС

но ведь разбирать на этапы не обязательно... По поводу нормализации - спасибо за подсказку, я обязательно поправлю, но все же проблема не в этом. Я тупо не могу понять почему в тестере работает а на демо - нет!

Artyom Trishkin
Модератор
56862
Artyom Trishkin  
Maksim Neimerik:

Все верно, так и есть. Но не могу понять почему на демо не работает....

Впишите в начале OnTick() такую строчку: Comment("Orders total: ",OrdersTotal()). Если там не ноль, и на текущем символе нет открытых позиций и выставленных ордеров - значит есть на другом символе ордер или позиция. Соответственно, и открываться новые позиции не будут. Ну или уберите из условий открытия позиций такую грубую проверку на количество ордеров на счёте - сделайте проверку на количество открытых позиций по символу.

Впрочем, Игорь вам уже указывал на эту вашу не очень корректную проверку. Но вы промолчали на этот счёт.

Igor Makanu
9931
Igor Makanu  
Maksim Neimerik:

но ведь разбирать на этапы не обязательно... По поводу нормализации - спасибо за подсказку, я обязательно поправлю, но все же проблема не в этом. Я тупо не могу понять почему в тестере работает а на демо - нет!

1. в истории в терминале установите глубже период

2. где обработка условия, что нет в истории терминала ордера?

3. а что делать если есть в истории ордер, а он с профитом?

и Вам уже указали, что условие 

&&OrdersTotal()==0
не совсем корректное - а что  будет если в терминале открыт ордер даже руками?
Maksim Neimerik
31908
Maksim Neimerik  
Renat Akhtyamov:

Вот это

требует сначала ручками выбрать период отражения закрытых ордеров

тоесть вы хотите сказать что просто нужно сделать вот так:
Renat Akhtyamov
16193
Renat Akhtyamov  
Maksim Neimerik:
тоесть вы хотите сказать что просто нужно сделать вот так:

да

потом пойдем дальше, если не заработает

Maksim Neimerik
31908
Maksim Neimerik  
Всем большое спасибо! Действительно проблема была в этом:
OrdersTotal()==0
Должен был сам заметить, но наверное заработался....
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий