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

 
законопослушный гражданин:

gracias

Pero en esta función: double GetProfitFromStart()

amarillo es sólo el nombre de la función, ¿tengo razón?

¿y en principio puede ser cualquier cosa?

Sí, lo llamé así para que quedara claro Obtenga beneficios desde el principio
 
MakarFX:
Sí, lo llamé así para que quedara claro Obtenga beneficios desde el principio

Gracias.

En la función de garrapata experta

void OnTick() - resulta que la línea de código : if(CountOrders()==0&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE)) no es sólo el disparador de la primera orden cuando el EA se inicia inicialmente

sino también cada ejecución después de que la orden se haya cerrado de acuerdo con una condición:

if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      if (IsTesting())
        {
         CloseOrder(); ObjectSetInteger(0,"lab_Button",OBJPROP_STATE,false);
        }
      else
        {
         CloseOrder();
}
}

¿lo he entendido bien?

 
MakarFX:

el importe de las pérdidas de todas las órdenes perdedoras

Debo haber entendido mal otra vez

o el importe de las pérdidas de cada orden perdedora

o la pérdida acumulada en todas las órdenes perdedoras...


Si sólo necesitas una única impresión, es mejor que lo hagas como un script

No tienes que hacerlo, puedes hacerlo así

Tu código ayudó, ahora los mismos mensajes no se muestran 100 veces sino sólo 4-10 veces. Tal vez habría que añadir el operador else.
 
Petronet:
Tu código ayudó, ahora los mismos mensajes no se muestran 100 veces sino sólo 4-10 veces. Quizás haya que añadir el operador else.
¿Cómo y dónde se escribe el código?
 
законопослушный гражданин:

Gracias.

En la función de garrapata experta

void OnTick() - resulta que la línea de código : if(CountOrders()==0&ObjectGetInteger (0, "lab_Button",OBJPROP_STATE)) no es sólo el disparador de la primera orden cuando el EA se inicia inicialmente

sino también cada ejecución después de que la orden se haya cerrado de acuerdo con una condición:

¿lo he entendido bien?

Estas son las condiciones para ejecutar el EA, si( si) (CountOrders()==0( ninguna orden )&&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE))( y el botón es presionado), entonces podemos operar

 
MakarFX:
¿Cómo y dónde se escribe el código?
El código se inserta en el cuerpo de la función int start() del EA. He añadido el operador else, que jode una variable vacía, la duplicación de datos se ha detenido, pero cuando dos beneficios consecutivos menos, la duplicación de datos se produce en 10 y 2-3 veces. Comenté mi bucle original, que daba la misma información 100 veces. Tu trabajo.
int start()
  {
  
  //for (int trade = OrdersHistoryTotal() - 1; trade >= 0; trade--) 
  //{
     //if ( OrderSelect(trade, SELECT_BY_POS,MODE_HISTORY)) 
     //{
         //old_order_type = OrderType();
         //if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         //{
                //Print("Закрылись с минусом:", OrderProfit());
                //break; //прекращаем поиск
         //}
         
     //}
     //break;
  //}
  
  for(int pos=0; pos<OrdersHistoryTotal(); pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderCloseTime()>=TimeStart)
              {
               if(OrderProfit()<0) {cnt=OrderProfit();
               Print("ордера с минусом", cnt); TimeStart=TimeCurrent(); cnt=0;}
               else gg=gg+1;
              }
           }
        }
     }
 
Petronet:
El código se inserta en el cuerpo de la función int start() del EA. He añadido el operador else, que atornilla la variable vacía, la duplicación de los datos se ha detenido, pero cuando dos ganancias perdidas consecutivas, la duplicación de los datos se produce 10 y 2-3 veces. Comenté mi bucle original, que daba la misma información 100 veces. Tu trabajo.
// это в глобальные переменные
datetime TimeStart; 

// это в init()

TimeStart=Time[0];

Se imprimirá una vez cuando aparezca una operación no rentable

 
Hola a todos, he insertado una función para cerrar posiciones el viernes a las 20:30

Pero el asesor no ve que es viernes y cierra posiciones todos los días

se ve así

input bool     UseTimeLimitClose           = true;     // -- Funktion ein/ausschalten --
enum daysOfWeek 
   { 
     Monday = 1, 
     Tuesday = 2, 
     Wednesday = 3, 
     Thursday = 4, 
     Friday = 5
   };
input  daysOfWeek closday          =    5;            // -- Handel bis Tag --
input int    Close_Hour            =   20;            // -- Handel bis Uhrzeit Std.--
input int    Close_min             =   30;



void OnTick() 

 if(UseTimeLimitClose)
     {
      MqlDateTime TimeNow;
      TimeToStruct(TimeCurrent(),TimeNow);
      if  ( TimeNow.day_of_week >= closday  && TimeNow.hour >= Close_Hour && TimeNow.min >= Close_min  ) 
       {
          CloseAllPositions();
       }     

 
Eugen8519:
Hola a todos, he insertado una función para cerrar posiciones el viernes a las 20:30

Pero el asesor no ve que es viernes y cierra posiciones todos los días

está así

void OnTick() 

 if(UseTimeLimitClose)
     {
      if  (TimeDayOfWeek(TimeCurrent())==closday  && TimeHour(TimeCurrent())>= Close_Hour && TimeMinute(TimeCurrent()) >= Close_min  ) 
       {
          CloseAllPositions();
       }     
 

Por favor, dígame cómo enviar esto a una variable externa

double levelss[7] = {0,0.236,0.382,0.5,0.618,1,1.618}; // Уровни Fibo