Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 91

 
Vitaly Muzichenko:
Tienes que ordenar por precio, porque no puedes buscar por tamaño, la cuadrícula puede ser diferente, y encontrarás o el más grande o el más pequeño, pero no el primero ni el último

Me refiero a la función que publicó Marina.

El último orden está determinado por el tiempo.

 
Alekseu Fedotov:

Me refiero a la función que publicó Marina.

El último orden está determinado por el tiempo.

Todos fueron colocados al mismo tiempo, así que con 14 órdenes puede haber una diferencia de 1 segundo, y no se puede ordenar por tiempo, sólo por precio.
 
Marina Korotkih:

Porque lo convoco de esta manera

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Lo tengo.
 

Queridos programadores Ayúdame a resolver esta cuestión. El Asesor Experto entra en una operación en M15, pero toma las condiciones de H1 también. Cuando se cumplen las condiciones de H1 en M15 puede haber varios puntos de entrada. En realidad el problema es que quiero utilizar sólo el primer punto de entrada, hasta que las condiciones en H1 se invierten.

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // compra

 
customer03:

Queridos programadores Ayúdame a resolver esta cuestión. El Asesor Experto entra en una operación en M15, pero toma las condiciones de H1 también. Cuando se cumplen las condiciones de H1 en M15 puede haber varios puntos de entrada. En realidad el problema es que quiero limitar el primer punto de entrada, hasta que las condiciones en H1 no se cambien al contrario.

k=0;
for (i=TotalPedidos()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // compra

¿Pero qué pasa sin el código? Especialmente, el código no es claro.

¿Qué quieres exactamente? No en abstracto, sino exactamente lo que quieres conseguir.

 
customer03:

Queridos programadores Ayúdame a resolver esta cuestión. El Asesor Experto entra en una operación en M15, pero toma las condiciones de H1 también. Cuando se cumplen las condiciones de H1 en M15 puede haber varios puntos de entrada. En realidad el problema es que quiero limitarme al primer punto de entrada, mientras que en H1 las condiciones no cambian al contrario.

k=0;
for (i=TotalPedidos()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // compra

Un algoritmo aproximado:

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

¿Y sin el código? Razón de más para no entender el código.

¿Qué quieres exactamente? No en abstracto, sino exactamente lo que quieres conseguir.

Artyom ¡hola! El objetivo es limitar la entrada en M15 a una (primera señal) mientras haya una señal en H1.
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
Artyom ¡hola! El objetivo es limitar la entrada en M15 a una (primera señal) mientras haya una señal en H1.

Así que comprueba el número de posiciones abiertas en la vela nula M15. Si ya tienes una posición y está abierta en una vela nula M15, entonces no abras más.
 

Hola, queridos miembros del foro. ¿Hay alguna manera de establecer el valor del trailing stop incorporado en Metatrader4 desde el EA? Me interesa esto y no añadir al EA un código para la ejecución de un trailing stop que sea independiente del trailing stop incorporado.

Gracias de antemano por las respuestas.

 
Dr_G:

Hola, queridos miembros del foro. ¿Hay alguna manera de establecer el valor del trailing stop incorporado en Metatrader4 desde el EA? Me interesa esto y no añadir al EA un código para la ejecución de un trailing stop que sea independiente del trailing stop incorporado.

Gracias de antemano por las respuestas.

No.