[¡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 73

 

Hola. ¿Cómo lo subo a un grado en MQL4?

 
Diver-si >> :
Hola. Este es un gran foro y yo soy un total nerd de la programación. ¿Es posible escribir un EA o indicarme la dirección de uno? Entrada de compra al cruzar la estocha 30, en el TF dado, si en un TF más alto la estocha sube y > 30, pero < 70. En la venta - cruzando 70, si en el TF superior estocástico está cayendo y > 30, pero < 70. Salir en la toma o en la parada con una opción para cambiar los valores.

Ya está hecho. He hecho todo lo que se me pidió.

Archivos adjuntos:
ctoh_1.rar  6 kb
 
Skydiver >> :

Hecho. Creo que he hecho todo lo que me has pedido.

>>¡¡¡¡Muchas gracias!!!!

 
Diver-si >> :

¡¡¡¡Muchas gracias!!!!

¿Ha trabajado antes con esta estrategia? ¿Ha tenido éxito?

 
Skydiver >> :

¿Ha trabajado antes con esta estrategia? >> ¿Ha tenido éxito?

No es una estrategia, sólo hay que probar una suposición. Por cierto, ¿por qué el EA no hace operaciones? No entiendo por qué.

 
В ветке "Корректное открытие нескольких позиций" приведён следующий код:


 if(iSAR(NULL,0,step0,0.1,0)<Close[0] )
         
         
        {
          RefreshRates();
      ticket = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
               0, Green ) );
if(ticket<1) {Print("Ошибка открытия 1-го ордера BUY #",GetLastError());return (0); }  
if (ticket>0) //Sleep(10000);
          { //если 1-я позиция открылась, открываем вторую
          RefreshRates();       
         ticket_1 = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
              0, Green ) ); 
if(ticket_1<1) {Print("Ошибка открытия 2 ордера BUY #",GetLastError());return (0); }    
if (ticket_1>0) // Sleep(10000);
         { // если вторая позиция открылась, открываем третью 
          RefreshRates();
      ticket_2 = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
              0, Green ) );
           if(ticket_2<1)
          {Print("Ошибка открытия 3 ордера BUY #",GetLastError());return (0); }   
         } 
       }    
     }

            
      if(iSAR(NULL,0,step0,0.1,0)>Close[0])
    {
        
        //---- открываем СЕЛЛ позицию
      RefreshRates();
      ticket = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
              0, Red ));
              
           if(ticket<1) {Print("Ошибка открытия 1-го ордера SELL #",GetLastError());return (0); }  
if (ticket>0) //Sleep(10000);
          { //если 1-я позиция открылась, открываем вторую
       RefreshRates();      
      ticket_1 = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
             0, Red ));
             
          if(ticket_1<1) {Print("Ошибка открытия 2 ордера SELL #",GetLastError());return (0); }    
if (ticket_1>0) // Sleep(10000);
         { // если вторая позиция открылась, открываем третью        
      RefreshRates(); 
      ticket_2 = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
              0, Red ));               
                if(ticket_2<1)
          {Print("Ошибка открытия 3 ордера SELL #",GetLastError());return (0); }   
         } 
       }    
     }
   
    return(0);
    
}



Me pueden decir cómo insertar una condición en esta construcción if(iSAR(NULL,0,step0,0.1,0)<Close[0]), que signifique que si, por ejemplo, se abren posiciones de compra, no se abran posiciones de venta hasta que se cierren todas las posiciones de compra. En otras palabras, un ciclo de negociación, compramos 3 posiciones, esperamos hasta que se cierren las tres. Las posiciones se cierran sólo con Stop Loss o Take Profit. Se cierran todas las posiciones, se espera la señal, se obtiene una señal, se compran o venden (según la señal) 3 posiciones, etc. Se han estudiado las "Funciones útiles de KimIV". Puede utilizar las funciones CountOrders(), ExistOrders(), ExistPositions(). Pero, ¿cómo se insertan en la práctica? La construcción if((iSAR(NULL,0,step0,0.1,0)>Close[0])&& ExistPositions(NULL,OP_SELL)==false) no funciona. Entiendo que tengo que insertar una variable lógica, pero ¿cómo lo hago en la práctica? No entiendo algo.

 
anat >> :



Podrían decirme cómo insertar una condición en este código if(iSAR(NULL,0,step0,0.1,0)<Close[0]), en la que, por ejemplo, si hemos abierto posiciones de Compra, no abramos posiciones de Venta hasta que se cierren todas las posiciones de Compra. En otras palabras, un ciclo de negociación, compramos 3 posiciones, esperamos hasta que se cierren las tres. Las posiciones se cierran sólo con Stop Loss o Take Profit. Se cierran todas las posiciones, se espera la señal, se obtiene una señal, se compran o venden (según la señal) 3 posiciones, etc. Se han estudiado las "Funciones útiles de KimIV". Puede utilizar las funciones CountOrders(), ExistOrders(), ExistPositions(). Pero, ¿cómo se insertan en la práctica? La construcción if((iSAR(NULL,0,step0,0.1,0)>Close[0])&& ExistPositions(NULL,OP_SELL)==false) no funciona. Entiendo que tengo que insertar una variable lógica, pero ¿cómo lo hago en la práctica? No entiendo algo.


Puede abrirlos, pero luego se superponen automáticamente en el lado opuesto. Y es mucho más fácil hacerlo con un EA independiente que añadir algún código adicional en un EA ya hecho. Corrector.mq4



 
(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 1, 1 ) < Ask) { // si el precio está por encima de la línea entonces vende <--------- ¿es esto correcto?



(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 2, 1 ) > Bid) { // si el precio está por debajo de la línea entonces compra <----- ¿es la lógica correcta o estoy confundiendo algo?



Ayuda, por favor...

 
1Rakso писал(а) >>
(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 1, 1 )

¿Qué es este diseño?