Задвоение ордеров при торговле советником. - страница 2

 
PapaYozh >>:


<Alt>+<W>

Появится список окон и советников.

Спб... не знал...
 
BantV писал(а) >>

Какое значение содержится в переменной chislo_toch ?
 

Все открытия работают в циклах. Откуда уверенность, что проход осуществляется только один раз? Убедитесь в том, что правильно соблюдены все условия выхода из циклов. Тем более, что у вас:

>>order[i]=-1;

>>while(order[i]==-1)

То есть условие не является абсолютным стопом, а всего лишь есть локальным ограничением.

Вставляйте Print и считайте)

 
hasayama >>:

Все открытия работают в циклах. Откуда уверенность, что проход осуществляется только один раз? Убедитесь в том, что правильно соблюдены все условия выхода из циклов. Тем более, что у вас:

>>order[i]=-1;

>>while(order[i]==-1)

То есть условие не является абсолютным стопом, а всего лишь есть локальным ограничением.

Вставляйте Print и считайте)


Эти циклы сделаны с целью долбиться в рынок. Например советник делает сделку, а связи нет в этот момент, как только советник сделку сделает, будет выход из цикла.
 
 void add_system(bool buy)
{
   int c;
   double peregib1=tochki[chislo_toch-1];
   for(c=chislo_toch-1;c>0;c--)
   {
      if(buy)
      {
         if((peregibVverh[c-1]==false))
        {
           if((tochki[c-1]<peregib1))
           {
              ty[i]=0; first=true;
              max[i]=iClose(para,0,0);
              min[i]=iClose(para,0,0);
              Lots1=NormalizeDouble(summ/(MathAbs(iClose(para,0,0)-peregib1)*100000),DigitLot);
              if(Lots1>maxLot)
              Lots1=maxLot;
              if(Lots1<MathPow(0.1,DigitLot))
                 Lots1=MathPow(0.1,DigitLot);
              order[i]=-1;
              while(order[i]<=0)
              {
                 RefreshRates();
                 order[i]= OrderSend(Symbol(),OP_BUY,Lots1,NormalizeDouble(Ask,Digits),slip,0,0);
              }
              //order[i]= OrderSend(Symbol(),OP_SELL,Lots1,NormalizeDouble(Bid,Digits),slip,0,0);
              stop_los[i]=peregib1;
              firstStop[i]=peregib1;
              rasstDoCeli[i]=MathAbs(iClose(para,0,0)-stop_los[i]);
              return;
           }
        }
     }
     if(!buy)
     {
        if((peregibVverh[c-1]==true))
        {
           if((tochki[c-1]>peregib1))
           {
              ty[i]=1; first=true;
              max[i]=iClose(para,0,0);
              min[i]=iClose(para,0,0);
              Lots1=NormalizeDouble(summ/(MathAbs(iClose(para,0,0)-peregib1)*100000),DigitLot);
              if(Lots1>maxLot)
              Lots1=maxLot;
              if(Lots1<MathPow(0.1,DigitLot))
              Lots1=MathPow(0.1,DigitLot);
              order[i]=-1;
              while(order[i]<=0)
              {
                 RefreshRates();
                 order[i]= OrderSend(Symbol(),OP_SELL,Lots1,NormalizeDouble(Bid,Digits),slip,0,0);
              }
              //order[i]= OrderSend(Symbol(),OP_BUY,Lots1,NormalizeDouble(Ask,Digits),slip,0,0);
              stop_los[i]=peregib1;firstStop[i]=peregib1;rasstDoCeli[i]=MathAbs(iClose(para,0,0)-stop_los[i]);}
              return;              
           }
        }
     }
  }
 
Хорошая попраквка, учту в следующий раз, спасибо. Но сейчас не в этом дело. Если бы он открывал  лишний ордер из-за цикла, то т.к. у меня хранится только один ордер в памяти, и закрываю я только один ордер, то второй бы просто  висел не закрытым. А он как 2 открыл так их и закрыл. Как такое может быть не пойму?
Причина обращения: