[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 463

 

Всем привет!

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

 
demlin:

Всем привет!

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


Значит для каждого инструмента своя глобальная переменная.))
 
tol64:

Значит для каждого инструмента своя глобальная переменная.))
Логично, тогда как заставить программу генерировать имена? Вручную забивать в код 60 переменных не охота че-то )))
 

Привет всем!

у меня затруднения... на графике висит эксперт круглосуточно, сегодня днем на EUR/USD было условие для открытия шорта, (опен предыдущей свечи был выше МА, а ее клоуз ниже МА) но ордер не открылся, прогнал этот участок сейчас в тестере - ордер открылся как миленький,

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

void CheckForOpensell()
  {
   double maopensell;
   int    ticketsell=0;


//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   maopensell=iMA(NULL,TF,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>maopensell && Close[1]<maopensell)
   for (int it=1; it<=10; it++)
    {
      while (!IsTradeAllowed()) Sleep(5000); 
      RefreshRates();
      ticketsell=OrderSend(Symbol(),OP_SELL,LotsOptimizedsell(),Bid,3,0,0," MA Sell M"+TF,MAGICMA,0,Red);
      if(ticketsell>0)
         {
          OrderModify (ticketsell,OrderOpenPrice(),Bid+StopLoss*Point,Bid-TakeProfit*Point,0,Gold);
          return;  
         }
      
      else
       {
        int err=GetLastError();
        if (err==128 || err==142 || err==143 || err==144) 
         {
           Sleep(2000);
           Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
           continue;
         }
        if (err==146) while (IsTradeContextBusy()) Sleep(2000);
        Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
        if (err==2 || err==64 || err==65 || err==4110 || err==4111) break;
        Sleep(2000);
       }
      
     }
  }
 
Abylhat:

Привет всем!

у меня затруднения... на графике висит эксперт круглосуточно, сегодня днем на EUR/USD было условие для открытия шорта, (опен предыдущей свечи был выше МА, а ее клоуз ниже МА) но ордер не открылся, прогнал этот участок сейчас в тестере - ордер открылся как миленький,

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


Очень возможно, что проблема в этом участке

 if(Volume[0]>1) return;

Сигналы с таким условием могут пропускаться. Но в тестере они отработают обязательно.

В тестере нет пропуска тиков

 
Vinin:


Очень возможно, что проблема в этом участке

Сигналы с таким условием могут пропускаться. Но в тестере они отработают обязательно.

В тестере нет пропуска тиков


Спасибо, а не подскажите как можно по другому задать условие?
 
Abylhat:

Спасибо, а не подскажите как можно по другому задать условие?

int start(){
   static int prevtime=0;
   if (Time[0]==prevtime) return(0);
   prevtime=Time[0];

//
   return(0);
}
Вместо Time[0] можно использовать TimeCurrent()
 
demlin:

Всем привет!

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

Эксперт получается торгует сразу несколькими инструментами?

Если же торгует только одним, то к названию глобальной переменной можно добавить Магический номер эксперта.

 
rlx:

Эксперт получается торгует сразу несколькими инструментами?

Если же торгует только одним, то к названию глобальной переменной можно добавить Магический номер эксперта.

Эксперт торгует несколькими инструментами одновременно
 
Vinin:

Вместо Time[0] можно использовать TimeCurrent()

спасибо, буду применять и испытывать....
Причина обращения: