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

 

Ciao, potresti darmi un suggerimento?

Cercando il massimo uguale al massimo della prima barra nella storia, memorizzo l'indice della barra trovata nella variabile High_i

Iofaccio così:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Ora, controllo se i massimi prima e dopo le tre barre devono essere inferiori al massimo della prima barra.

Devo includere questo nel ciclo:

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

Da un lato cerco di controllare così

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Per favore, aiutatemi.




	          
 
tatianati:
Ora, controllando, l'hai delle tre barre prima e dopo dovrebbe essere inferiore all'hai della barra trovata.

Potrebbe essere così:

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Probabilmente così:



Grazie, funziona.

Ma dopo aver aumentato il numero di barre, così:

for(int x=(High_i-7); x<=(High_i+7); x++)

si alza.

arrayfuori range in 'ta_v1_05.mq4' (174,11)

linea 174, questa:

   if(High[x]>=High[High_i])

per favore ditemi come risolvere il problema.

 
sei sicuro che x sia un numero naturale o 0? se high_i = ad esempio 6, allora x = -1, e high[-1] è già un problema. forse aggiungere un controllo nella linea 173 se (x < 0) continua;
 
tatianati

danik: sei sicuro che x sia un numero naturale o 0? se high_i = ad esempio 6, allora x = -1, e high[-1] è già un problema. forse aggiungere un controllo nella linea 173 if (x < 0) continue;
Per tre barre un tale "controllo" è stato fatto:
      for(j=i+3;j<=i+m;j++)

Per gli altri valori bisogna cambiarli dappertutto.
Potresti iniziare con questo, e poi vedere se questo risolve il problema o se c'è qualcos'altro che deve essere sistemato.
 
Salve, potreste consigliarmi, c'è una funzione per chiudere gli ordini, ma gli ordini non vengono chiusi per qualche motivo, non riesco a capire cosa c'è di sbagliato
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Ciao, potresti consigliarmi, c'è una funzione per chiudere gli ordini, ma gli ordini non vengono chiusi per qualche motivo, non riesco a capire cosa c'è di sbagliato

Il prezzo non può essere int!

int ClosePrice;
 
TarasBY:

Il prezzo non può essere int!

oh giusto!!! Grazie!!!
 
Aiutami a trovare un bug nel codice, sembra che stia disegnando due linee basate sui dati dell'indicatore MACD ZeroLag per EUR\USD e GBP\USD, ma non succede nulla. Ecco il codice
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
Per favore, aiutatemi a trovare un bug nel codice, sembra che ZeroLag MACD dovrebbe disegnare due linee con i dati degli indicatori EUR\USD e GBPUSD, ma non succede niente. Ecco il codice

Si dice che IndicatorCounted() non funziona, anche il ricalcolo degli indicatori è più corretto per contare dal passato al presente, e ci sono alcuni altri errori nel codice.

P.S. Lo stesso ZeroLag MACD dovrebbe essere "regolato" per la nuova macchina virtuale.