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

 
Artyom Trishkin:

Da questo tempo[i] si dovrebbe estrarre un'ora.

Stampa ancora l'ora 10:05:00 e 22:10:00 e altre al di fuori del tempo consentito.

Non dovrebbe stampare dalle 17:00 alle 11:00, ma lo fa.

 for(int i=limit-2; i>0; i--) 
     {
    if(TimeHour(time[i])>=17&&TimeHour(time[i])<=11)continue;
      if(i%2==0) 
        {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k1++;
            if(k1>max) {max=k1; dat_max=time[i];}
            if(k1>=4)Print("Num: ",k1,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k1,time[i],high[i],Arr);
           }
         else k1=0;
         
           } else {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k2++;
            if(k2>max){ max=k2; dat_max=time[i];}
            if(k2>=4)Print("Num: ",k2,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k2,time[i],high[i],Arr);
           }
         else k2=0;
         
        }
      
     }

   Comment("Max: ",max,"dat_max ",dat_max," rates_total ",rates_total);

 
if(TimeHour(time[i])>=17 || TimeHour(time[i])<=11)continue;
 
Taras Slobodyanik:

Grazie.

 
k_chens:

Buon pomeriggio, per favore aiutatemi! Sto cercando di scrivere un sacco di controllo dei conti. Se il mio conto fa +10% di profitto, allora il lotto viene raddoppiato. Se +20%, allora lotto*4. Se nel mio conto diminuisce, allora rispettivamente diminuisce la dimensione del lotto. Non capisco come fare in modo che Lots_New prenda un nuovo valore ad ogni nuovo scambio.

Questo è un compito tutt'altro che banale per una persona che sta appena iniziando a imparare la programmazione. Dopo tutto, per risolverlo, bisogna pensare a un meccanismo per memorizzare il prossimo valore di equilibrio. Inoltre, dobbiamo capire dove memorizzare questo valore. Le variabili nei programmi non sono adatte a questo scopo. Per esempio, potete usare le variabili globali del terminale o scriverle in un file. Tutto dipende da dove e come pensate di usare il programma.

La soluzione più universale (se il programma è previsto per essere utilizzato su diversi computer senza la possibilità di trasferire i dati tra le copie del programma) è quella di scansionare la storia del conto per calcolare il profitto/perdita, ottenuto come risultato del lavoro del programma. Ma poi c'è anche la questione della scelta di un punto di riferimento (dove ottenere il valore di equilibrio da cui contare).

 
Ciao, puoi spiegare le linee per la selezione di un medgico:

Extern bool hand orders =true ;
Extern int Magic_Number =777;
/prima linea
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//seconda linea
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true))


Che tipo di valori medgici mancano? Per favore, scrivi
 
Tigerfreerun:
Ciao, per favore spiega le linee per selezionare un medjic:

Extern bool hand orders =true ;
Extern int Magic_Number =777;
/prima linea
((OrderMagicNumber()==Magic_Number && hand_orders==false) || (OrderMagicNumber()==0 && hand_orders==true))

//seconda linea
(OrderMagicNumber()==Magic_Number || (OrderMagicNumber()==0 && hand_orders==true))


Che tipo di valori medgici mancano? Per favore, scrivi

sostituite nelle vostre espressioni - && con "AND AT THE SAME TIME", e sostituite || con "OR".

dovresti essere in grado di leggerlo e vedere come funziona.


la prima linea funzionerà sia con magic =777 (quando hand_orders=false) o magic = 0 (quando hand_orders=true)

la seconda linea funziona SEMPRE con majic=777, e se hand_orders=true, funziona ADDIZIONALMENTE con majic=0

 

Come posso calcolare, in una funzione, il profitto in pip per due strumenti?

Rolling

double Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   double xxx=0;
   bool bw;
   for(int t=0;t<=OrdersTotal();t++)
     {
      bw=OrderSelect(t,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Sy_1 || OrderSymbol()==Sy_2
         && OrderMagicNumber()==_Mag
         && (OrderType()==OP_BUY || OrderType()==OP_SELL))
         xxx=OrderClosePrice()-OrderOpenPrice();
      RefreshRates();
     }
   return(xxx);
  }
 
PolarSeaman:

Come posso calcolare, in una funzione, il profitto in pip per due strumenti?

Rolling

int Punkts_B(string Sy_1="",string Sy_2="",int _Mag=-1)
  {
   int xxx = 0;
   double tickValue_1 = SymbolInfoDouble(Sy_1, SYMBOL_TRADE_TICK_VALUE),
          tickValue_2 = SymbolInfoDouble(Sy_2, SYMBOL_TRADE_TICK_VALUE);
   for(int t=0;t<OrdersTotal();t++)
     {
      if( !OrderSelect(t,SELECT_BY_POS,MODE_TRADES) )  continue;
      if( OrderSymbol()!=Sy_1 && OrderSymbol()!=Sy_2 ) continue;
      if( OrderMagicNumber()!=_Mag )                   continue;
      if( OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
      xxx+=(int)((OrderProfit()+OrderSwap()+OrderCommission())/(OrderSymbol()==Sy_1 ? tickValue_1 : tickValue_2));
     }
   return(xxx);
  }
 
Konstantin Nikitin:
i punti di due strumenti diversi non possono essere sovrapposti.
 
Maxim Kuznetsov:
non si possono sommare i punti di due strumenti diversi.

Ha chiesto, ai punti, eccolo ai punti. Lasciatelo pensare =)