Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1594

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

grazie

Ma in questa funzione: double GetProfitFromStart()

Il giallo è solo il nome della funzione, ho ragione?

e in linea di principio può essere qualsiasi cosa?

Sì, l'ho chiamato così per rendere chiaro Get Profit FromStart
 
MakarFX:
Sì, l'ho chiamato così per rendere chiaro Get Profit FromStart

Grazie.

Nella funzione Expert tick

void OnTick() - risulta che la linea di codice: if(CountOrders()==0&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE)) non è solo l'innesco del primo ordine quando l'EA è inizialmente avviato

ma anche ogni esecuzione dopo che l'ordine è stato chiuso secondo una condizione:

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

Ho capito bene?

 
MakarFX:

l'importo della perdita su tutti gli ordini perdenti

Devo aver capito di nuovo male

o l'importo della perdita su ogni ordine perdente

o la perdita cumulativa su tutti gli ordini perdenti...


Se avete bisogno di una sola stampa, è meglio farlo come script

Non è necessario, si può fare così

Il tuo codice ha aiutato, ora gli stessi messaggi non vengono mostrati 100 volte ma solo 4-10 volte. Forse si dovrebbe aggiungere l'operatore else.
 
Petronet:
Il tuo codice ha aiutato, ora gli stessi messaggi non vengono mostrati 100 volte ma solo 4-10 volte. Forse bisogna aggiungere l'operatore else.
Come e dove viene scritto il codice?
 
законопослушный гражданин:

Grazie.

Nella funzione Expert tick

void OnTick() - risulta che la linea di codice: if(CountOrders()==0&ObjectGetInteger (0, "lab_Button",OBJPROP_STATE)) non è solo l'innesco del primo ordine quando l'EA è inizialmente avviato

ma anche ogni esecuzione dopo che l'ordine è stato chiuso secondo una condizione:

Ho capito bene?

Queste sono le condizioni per eseguire l'EA, se( if) (CountOrders()==0( nessun ordine )&&ObjectGetInteger(0, "lab_Button",OBJPROP_STATE))( e il pulsante è premuto), allora possiamo fare trading

 
MakarFX:
Come e dove viene scritto il codice?
Il codice è inserito nel corpo della funzione int start() dell'EA. Ho aggiunto l'operatore else, che incasina una variabile vuota, la duplicazione dei dati si è fermata, ma quando due profitti minus consecutivi, la duplicazione dei dati avviene su 10 e 2-3 volte. Ho commentato il mio ciclo originale, che dava la stessa informazione 100 volte. Il tuo lavoro.
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:
Il codice è inserito nel corpo della funzione int start() dell'EA. Ho aggiunto l'operatore else, che avvita la variabile vuota, la duplicazione dei dati si è fermata, ma quando due profitti perdenti consecutivi, la duplicazione dei dati avviene 10 e 2-3 volte. Ho commentato il mio ciclo originale, che dava la stessa informazione 100 volte. Il tuo lavoro.
// это в глобальные переменные
datetime TimeStart; 

// это в init()

TimeStart=Time[0];

Stamperà una volta quando appare un'operazione non redditizia

 
Ciao a tutti, ho inserito una funzione per chiudere le posizioni il venerdì alle 20:30

Ma il consulente non vede che è venerdì e chiude le posizioni ogni giorno

sembra così

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:
Ciao a tutti, ho inserito una funzione per chiudere le posizioni il venerdì alle 20:30

Ma il consulente non vede che è venerdì e chiude le posizioni ogni giorno

sta così

void OnTick() 

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

Per favore consigliate come emettere questo in una variabile esterna

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