[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 867

 

Estimados expertos. Estoy aprendiendo a programar. Hice mi primer Asesor Experto, pero abre una operación y no hace nada más. No ha escrito un error en el diario. ¡Necesito tu ayuda!

//+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link      "http://www.metaquotes.net"

extern double Lot=0.1;          //Рабочий лот
extern double TakeProfit=149;    //
extern double StopLoss=275;      //          
extern int Total=1;             //Колличество ордеров   
//+------------------------------------------------------------
int start()
{//1
if(TakeProfit<10)
{//2 
  Alert("Ошибка,TakeProfit слишком близко");
  return;
}//2
     
if(StopLoss<10)
{//2
  Alert("Ошибка,StopLoss слишком близко");
  return;
}//2

if(Total<1)
{//2
  Alert("Ошибка, неизвестно колличество ордеров");
  return;
}//2
bool Buy=false;
bool Sell=false;
bool BuyClose=false;
bool SellClose=false;                                                                             
if(iHigh(NULL,PERIOD_M15,2)<iClose(NULL,PERIOD_M15,1))Buy=true;
if(iLow(NULL,PERIOD_M15,2)>iClose(NULL,PERIOD_M15,1))Sell=true;
if(iClose(NULL,PERIOD_M15,2)>iClose(NULL,PERIOD_M15,1))BuyClose=true;
if(iClose(NULL,PERIOD_M15,2)<iClose(NULL,PERIOD_M15,1))SellClose=true;
if(Buy==false&&Sell==false&&BuyClose==false&&SellClose==false)return;
int err;                                                 //
int ticket;                                              //
int Order_Count[6];                                      //
int OP=-1;                                               //
ArrayInitialize(Order_Count,0);                          //
                                                          //Блок учета ордеров
for(int i=1; i<=OrdersTotal(); i++)                      //
{//2                                                     //
  if(OrderSelect(i-1, SELECT_BY_POS)==true)               // 
  Order_Count[OrderType()]++;                             //
  if(OP!=-1) return(Order_Count[OP]);                     //                         
}//2
  if(OrderSelect(ticket,SELECT_BY_TICKET))                //Закрытие ордеров Sell
{//2                                                     // 
  if((OrderType()==1)&&(Buy==true||SellClose==true))      //  
  {//3                                                    //
  OrderClose(ticket,Lot,Ask,4);                           //
  err=GetLastError();                                     //Обработка ошибок 
  if(err==0)                                              //
  return;                                                 //  
  else                                                    //
  {//4                                                    //
  Sleep(1000);                                            //
  Alert(err);                                             //
  }//4                                    
  }//3
}//2 
  if(OrderSelect(ticket,SELECT_BY_TICKET))                //Закрытие ордеров Buy
{//2                                                     //
  if((OrderType()==0)&&(Sell==true||BuyClose==true))      // 
  {//3                                                    //  
  OrderClose(ticket,Lot,Bid,4);                           // 
  err=GetLastError();                                     //Обработка ошибок
  if(err==0)                                              //
  return;                                                 //
  else                                                    //
  {//4                                                    //
  Sleep(1000);                                            //
  Alert(err);                                             //
  }//4
  }//3
}//2 
if(Order_Count[OP_BUY]>=Total&&Order_Count[OP_SELL]>=Total) return;                  
                                                                                      
if(Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]==0&&Buy==true)                    //Открытие ордеров Buy
{//2                                                                                 //
  OrderSend(Symbol(), OP_BUY, Lot, Ask, 4, Ask-StopLoss*Point, Ask+TakeProfit*Point); // 
  err=GetLastError();                                                                 //Обработка ошибок
  if(err==0)                                                                          //
  return;                                                                             //
  else                                                                                //
  {//3                                                                                // 
  Sleep(1000);                                                                        //
  Alert(err);                                                                         //
  }//3
}//2         
           
if(Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]==0&&Sell==true)                   //Открытие ордеров Sell 
{//2                                                                                 //
  OrderSend(Symbol(), OP_SELL, Lot, Bid, 4, Bid+StopLoss*Point, Bid-TakeProfit*Point);//
  err=GetLastError();                                                                 //Обработка ошибок
  if(err==0)                                                                          //
  return;                                                                             //
  else                                                                                //
  {//3                                                                                //
  Sleep(1000);                                                                        //
  Alert(err);                                                                         //
  }//3
}//2

return;
}//1
 

¿Pueden decirme cómo establecer una cláusula de prohibición de comercio?

Por ejemplo: si iStochastic >80 entonces nottreid (¿operación prohibida (o apertura de posición prohibida)?

 
fanat:

Estimados expertos. Estoy aprendiendo a programar. Hice mi primer EA, pero abre un trato y no hace nada más. No ha escrito un error en el diario. ¡Necesito tu ayuda!


Una mezcla infernal, pero funciona (en el probador)

 
Vinin:


Una mezcla infernal, pero funciona (en el probador)


Me doy cuenta de que las condiciones para abrir un trato son una tontería.
 
Vinin:


Una mezcla infernal, pero funciona (en el probador)


Construye 226. El mío ni siquiera funciona en el probador. ¿Puede decirme por qué?
 
fanat:

Construye 226. Ni siquiera funciona en mi probador. ¿Puede decirme por qué?

No sé por qué no te funciona. El código funciona
 
fanat:

Construye 226. Ni siquiera funciona en mi probador. ¿Puede decirme por qué?

Descargue el terminal en otro lugar de la misma Build 226.

 
Vinin:

No sé por qué no te funciona. El código funciona.

Lo tengo. Gracias. Intentaré reinstalar MT.
 

Estimados expertos. He enviado el código esta mañana. Existen condiciones para el cierre de operaciones por parte del propio Asesor Experto. Pero cierra las operaciones únicamente con el TP o el SL. Y si pongo el TP y el SL a 900, sólo abre una operación y ya está. Estoy pidiendo ayuda.

 
fanat:

Estimados expertos. He enviado el código esta mañana. Tiene condiciones para cerrar las operaciones por el propio Asesor Experto. Pero cierra las operaciones únicamente con el TP o el SL. Y si pongo el TP y el SL a 900, sólo abre una operación y ya está. Estoy pidiendo ayuda.


Cómo puede ser si el billete es siempre 0. Tiene que estar preasignado a algo

Por ejemplo

   int ticket;        

   for(int i=0 i<OrdersTotal(); i++)                      
      if(OrderSelect(i, SELECT_BY_POS))
         ticket=OrderTicket();