Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 108

 
webip:
Народ помогите пожалуйста. Уже 5-ый день не могу разобраться. У меня в советнике сделано так, чтобы при срабатывании нужных критериев модифицировать стоп лосс ордера. А стоп лосс - который нужно ставить, тейк профит последнего закрытого ордера. Но когда начинается модификация, робот ставит всегда стоп лосс 1.0000. Не пойму в чем дело. Уже голову сломал. Есть у кого нить варианты - как ставить тейк предыдущего ордера, на стоп лосс текущего?

Ну... похоже, что запоминаете в переменную с типом int, а нужно - double

И вовсе необязательно, что тейк текущего сможете поставить на стоп предыдущего... Он может оказаться там, куда ставить его нельзя

 
artmedia70:

Ну... похоже, что запоминаете в переменную с типом int, а нужно - double

И вовсе необязательно, что тейк текущего сможете поставить на стоп предыдущего... Он может оказаться там, куда ставить его нельзя


но он там, где его можно ставить. Я тоже с перва думал что запоминаю не в своем типе, но потом проверил все - норм.
 
webip:
но он там, где его можно ставить. Я тоже с перва думал что запоминаю не в своем типе, но потом проверил все - норм.

Запоминайте его в переменную double, скорее всего вы запоминаете цену в переменную int, соответственно, дробная часть отсекается.
 
artmedia70:
Запоминайте его в переменную double, скорее всего вы запоминаете цену в переменную int, соответственно, дробная часть отсекается.


Проверил еще раз. Ничего не понял, но все переменные на своем месте. Единственная проблема теперь - в тестере когда срабатывает критерий для модификации ордера, то график тестера стратегий просто замерзает. Что делать? Вроде все запоминалось в double.
 
webip:

Проверил еще раз. Ничего не понял, но все переменные на своем месте. Единственная проблема теперь - в тестере когда срабатывает критерий для модификации ордера, то график тестера стратегий просто замерзает. Что делать? Вроде все запоминалось в double.

Холодильник забыли закрыть на кухне :)

Ну что можно ещё вам подсказать на голом месте?

Так вроде? Или точно цены запоминаете в переменную с типом double?

 
artmedia70:

Холодильник забыли закрыть на кухне :)

Ну что можно ещё вам подсказать на голом месте?



Нет. Холодильник закрыт. :))

Не знаю в чем проблема. Все переменные сделал правильно. Вот тот кусок, где модифицируется. Может Вы поймете в чем проблема.

int modify_2(int tip)
 {

 int ticket;  //номер ордера
 double 
 price,   //Цена открытия
 tp;     //Новое значение цены
 double ts;
 bool modify=false;
 double take;
 
  for(int n=1;n<=OrdersTotal();n++)
   {
    ticket=mas_ord[n][1];
    if(mas_ord[n][4]!=tip)
     continue;
    price=mas_ord[n][6];
    tp=mas_ord[n][2];                          
    
    switch(tip)
     {

      case 0:
     OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
       modify=true;
       break;
      
      case 1:
       ts=Ask+Level_sell_138*Point;
       modify=true;        
     } 
    //--------------
    if(modify==false)
     continue;
    
    bool ans=OrderModify(ticket,price,ts,tp,0);
    
    if(ans==false)
     { 
      n--;
     }
     else ord_2=true;
   }
   return;
 }
 
webip:


Нет. Холодильник закрыт. :))

Не знаю в чем проблема. Все переменные сделал правильно. Вот тот кусок, где модифицируется. Может Вы поймете в проблема.

Это из учебника что ли?

for(int n=1;n<=OrdersTotal();n++)

Перебор ордеров нужно так:

for(int n=0;n<OrdersTotal();n++)

Соответственно, остальные массивы поплывут...

Последний закрытый ордер я бы искал перебором по истории, а не явным указанием на 1

Ну и т.д. ... дальше уже не могу искать ничего - во-первых без целостности кода это вряд ли поможет, а во-вторых - семь утра, а я ещё не ложился даже...

 
webip:


Нет. Холодильник закрыт. :))

Не знаю в чем проблема. Все переменные сделал правильно. Вот тот кусок, где модифицируется. Может Вы поймете в проблема.

Попробуйте n сделать double! Не помешает, но может помочь разрешить проблему.
 
artmedia70:

Это из учебника что ли?

Перебор ордеров нужно так:

Соответственно, остальные массивы поплывут...

Последний закрытый ордер я бы искал перебором по истории, а не явным указанием на 1

Ну и т.д. ... дальше уже не могу искать ничего - во-первых без целостности кода это вряд ли поможет, а во-вторых - семь утра, а я ещё не ложился даже...



С таким перебором тоже работало нормально. А тот последний закрытый ордер, я указал напрямую, чтобы узнать работает ли нормально вообще прога(а работает она хренова). А т.к. тестирую в тестере (а я знаю что ордер который мне интересует откроется первым). а код у меня очень длинный. не получится скопировать сюда:)
 
webip:


Нет. Холодильник закрыт. :))

Не знаю в чем проблема. Все переменные сделал правильно. Вот тот кусок, где модифицируется. Может Вы поймете в чем проблема.

Массив

mas_ord

у вас какой тип имеет?

а переменные price, tp, take какой тип? Почему мы тут гадать должны?

Причина обращения: