[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 487

 
silhouette:

Sono un po' bloccato sull'implementazione dell'algoritmo di piazzamento degli ordini.

L'essenza è che c'è un biglietto, accendo l'enumerazione con una condizione per trovare il biglietto:

Se uno degli ordini corrisponde a una magia, lo modifichiamo.

Abbiamo un altro compito: se nessuno degli ordini corrisponde a una magia, dobbiamo impostare un nuovo ordine in sospeso. if(OrderMagicNumber()!=magic) non funziona qui.

Come possiamo implementare questa condizione senza ricorrere a funzioni personalizzate di terzi?

È molto semplice. Crea una variabile booleana. Prima di elaborare gli ordini, impostatelo su false. Non appena l'ordine viene elaborato, cambiatelo in true. Dopo aver controllato tutti gli ordini, controllate il valore della variabile - se rimane falso, significa che non c'è stato nessun ordine con la magia necessaria. Si apre un nuovo ordine.

 
midorum:

È molto semplice. Crea una variabile booleana. Impostatelo su false prima di elaborare gli ordini. Non appena l'ordine viene elaborato, cambiatelo in true. Dopo aver controllato tutti gli ordini, controlla il valore della variabile - se rimane falso, significa che non c'è stato nessun ordine con la magia necessaria. Si apre un nuovo ordine.

Grazie!
 
Roman.:
Provate a giocare (modificate secondo le vostre esigenze) con isCloseLastPosByStop di Kim - restituisce la bandiera per chiudere l'ultima posizione per stop

e NumberOfPositions - restituisce il numero di posizioni, e forse altri si adatteranno alla tua domanda...


GRAZIE AMICO, CONTINUERÒ A SCAVARE :D
 

Ho deciso di capire come funziona l'indicatore ATR, e allo stesso tempo di studiare il suo codice. Ho capito il succo, ma è scritto in modo strano.

Ecco la sua funzione di avvio:

int start()
  {
   int i,counted_bars=IndicatorCounted();
//----
   if(Bars<=AtrPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   for(i=0; i<limit; i++)
      AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
//----
   return(0);
  }
//+----------------

Ecco il primo blocco di confusione:

//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----

Che senso ha fare qualcosa se il valore counted_bars <1. Secondo me, significa che l'indicatore non ha contato nessuna barra e dovrei semplicemente uscire dalla funzione perché non ci sono ancora valori... Qual è la fregatura?

Perché AtrBuffer ha l'indice[Bars-i]? Ho capito che l'idea è di impostare il buffer a 0,0 se non ci sono valori. Ma si scopre che il valore 0.0 è definito solo per le barre da (Bars) a (AtrPeriod), mentre daAtrPeriod alla barra 0-esima non viene scritto nulla nel buffer. Perché?

Non capisco la logica di questo frammento di codice

Nel prossimo blocco:

//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----

Nella linea:

if(i==Bars-1) TempBuffer[i]=high-low;

Condizione se i==Bars-1. Sembra che il valore della prima barra dall'inizio del grafico a sinistra sia preso in considerazione... Ma questo è molto lontano, a cosa serve questo valore?

 

Ho bisogno di aiuto!

Come posso fare in modo che un EA chiuda tutti gli ordini aperti e pendenti ad un determinato livello di drawdown, per esempio 30%, e poi riavviarlo e ricominciare tutto da capo?

File:
 
OrderSend
(  string symbol, int cmd, double volume, double price, int slippage,
double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Potreste dirmi cosa dovrebbe esserci nel parametro datetime expiration nella funzione di immissione dell'ordine, in modo che l'ordine in sospeso si cancelli dopo 5 minuti se non ha funzionato? È TimeCurrent()+300 o no?

 
BeerGod:

Potreste dirmi cosa dovrebbe esserci nel parametro datetime expiration nella funzione di immissione dell'ordine, in modo che l'ordine in sospeso si cancelli dopo 5 minuti se non ha funzionato? È TimeCurrent()+300 o no?

indica i secondi, se non mi sbaglio. quindi hai ragione, 5 minuti saranno 300. Prova a usare il tempo di apertura senza stop e profitto e il tempo di chiusura, stampalo e potrai confrontarlo.
 
Ciao a tutti. mi piace dare una mano, scommessa 0.10 stop 200pip quale importo devo avere per sostenere 200pip?
 
laveosa:
Ciao a tutti. mi piace dare una mano, scommessa 0.10 stop 200pip quanto devo avere per sostenere 200pip?
Non lo so, dipende da che tipo di account stai usando, per esempio normale o cent. A volte 1 pip per 0,01 lotti = 1 centesimo (x10x200 = 20 USD), e a volte 1 pip per 0,01 lotti = 10 centesimi (x10x200 = 200 USD).
 
paladin80:
Beh, dipende dal tipo di account che stai usando, ad esempio un account normale o un account cent. A volte 1 pip per 0,01 lotti = 1 centesimo (x10x200 = 20 USD), e a volte 1 pip per 0,01 lotti = 10 centesimi (x10x200 = 200 USD).
Ho 1 pip - 1 cent. quindi ho bisogno di 20 usd per essere in grado di fermarmi a 200 pip?
Motivazione: