Помогите новичку - страница 2

 
eyvazlee:

Здравствуйте 

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

прошу помочь с этой проблемой

 образец кода:

 if(A>B && OrdersTotal()<1)

 {

      if(OrderSend(Symbol(),OP_SELL,1,Bid,10,0,0,0,0,0,clrGreen))

      OrderSelect(0,SELECT_BY_POS,NULL);

      ShellExecuteW(0,"open",linkS,"","",1);

}

Значит ордер не открывается. Если бы ордер открывался, то был бы только один переход по ссылке. Делайте это только при успешном вызове OrderSend():

 if(A>B && OrdersTotal()<1)

 {

      if(OrderSend(Symbol(),OP_SELL,1,Bid,10,0,0,0,0,0,clrGreen)>0){

          OrderSelect(0,SELECT_BY_POS,NULL);

          ShellExecuteW(0,"open",linkS,"","",1);
      
      }

}
 
Dmitry Fedoseev:

Значит ордер не открывается. Если бы ордер открывался, то был бы только один переход по ссылке. Делайте это только при успешном вызове OrderSend():

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

Так же при отключении режима советника исполнения осуществляются, соответственно вызов OrderSend():  исключается

 
eyvazlee:

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

Так же при отключении режима советника исполнения осуществляются, соответственно вызов OrderSend():  исключается

Неужели?

Как же проверка на количество ордеров?

if(A>B && OrdersTotal()<1)
 
Dmitry Fedoseev:

Неужели?

Как же проверка на количество ордеров?

В этом и проблема, ваш код не смотрит на кол-во ордеров, лишь условия исполнения  A>B

Вот вам  обычный пример для анализа.

 

 

#import "shell32.dll"
int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd); 

double data(int type,int period,int shift)
  {
   double data[2];
   data[1]=iClose("",period,shift); 
   if(type==1)
     {
      return(data[type]);
     }   
       }
void OnTick(void)
  {
 if( data(1,0,0)>data(1,0,1)&& OrdersTotal()<1)
     {
      if(OrderSend(Symbol(),OP_SELL,1,Bid,10,0,0,0,0,0,clrGreen))
      OrderSelect(0,SELECT_BY_POS,NULL);
      ShellExecuteW(0,"open","https://mql5.com","","",1);
      }
 if( data(1,0,0)<data(1,0,1) && OrdersTotal()<1)
     {
     if (OrderSend(Symbol(),OP_BUY,1,Ask,10,0,0,0,0,0,clrGreen))
         OrderSelect(0,SELECT_BY_POS,NULL);
         ShellExecuteW(0,"open","https://google.com","","",1);
     }     
  }
 
eyvazlee:

В этом и проблема, ваш код не смотрит на кол-во ордеров, лишь условия исполнения  A>B

Вот вам  обычный пример для анализа.

 

 

Вообще-то это бы не мой код, а ваш, только немного доработанный. Где же он не смотри количество ордеров?

Вот это что - 

OrdersTotal()<1

 ?

 
eyvazlee:

В этом и проблема, ваш код не смотрит на кол-во ордеров, лишь условия исполнения  A>B

Вот вам  обычный пример для анализа.

 

 

Все работает. Ордер открылся, переход совершился. И пока ордер не закрыть, переходов не будет.
 
Естественно!
Причина обращения: