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

 

> err=StringToInteger((string)err)

questo dovrebbe entrare negli annali ;-)

originariamente in err hai ovviamente ottenuto int da GetLastError(). Converte il codice di errore in una descrizione leggibile ErrorDescription(err); a condizione che #include <stdlib.mqh> sia abilitato.

ma il modo in cui è scritto è una seccatura.

PS/ E non imparare la programmazione MQL. MQL 4 e 5 sono linguaggi di destinazione per una piattaforma particolare.

 

Puoi dirmi per favore se puoi scriverlo in questo modo. non vuole aprire le transazioni. forse il formato dei numeri calcolati è sbagliato? o altri difetti nel codice?


doppio TakeLong(double shp)

{

int CurrentDayRange=0, fiveDayATR=0, take=0;

doppio TP_ATR=0;

//////Pivot ingressi

doppio P, S1, R1, S2, R2, S3, R3;

doppio LastHigh, LastLow, x;

int counted_bars = IndicatorCounted();

limite int, i;

shp=iHigh(Symbol(),PERIOD_D1,0);


//---- Calcolo dell'indicatore Pivot

if(counted_bars == 0)

{

x = Periodo();

se(x > 240)

ritorno(-1);

}

se(barre contate < 0)

ritorno(-1);

limite = (Bars - counted_bars) - 1;

//----

for(i = limite; i >= 0; i--)

{

se(Alto[i+1] > UltimoAlto)

LastHigh = High[i+1];

//----

se(Basso[i+1] < UltimoBasso)

LastLow=Low[i+1];

if(TimeDay(Time[i]) != TimeDay(Time[i+1])

{

P = (LastHigh + LastLow + Close[i+1]) / 3;

R1 = (2*P) - LastLow;

S1 = (2*P) - LastHigh;

R2 = P + (LastHigh - LastLow);

S2 = P - (LastHigh - LastLow);

R3 = (2*P) + (LastHigh - (2*LastLow));

S3 = (2*P) - ((2* LastHigh) - LastLow);

LastLow = Open[i];

LastHigh = Open[i];

}

}

////ATR calcolo

per (i=1;i<6;i++)

{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}

FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());

CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));

se(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; altrimenti TP_ATR=0;


if (Bid>R1 && TP_ATR==0) take=shp;

else if (Bid<R1 && R1<TP_ATR) take=R1;

else take=TP_ATR;

return(take);

}

 
forexpipsrunner: per favore ditemi se potete scriverlo così. non vuole aprire gli scambi

Il codice suggerito sembra un indicatore. Le operazioni vengono aperte da un Expert Advisor o da uno script. La chiamata alla funzione OrderSend non è consentita nell'indicatore. L'indicatore può allarmare - inserire la funzione Alert call o sound nel posto appropriato

 
STARIJ:

Il codice proposto è simile all'indicatore. Le operazioni vengono aperte da un Expert Advisor o da uno script. La chiamata alla funzione OrderSend è vietata nell'indicatore. L'indicatore può segnalare - inserire la chiamata della funzione Alert o il suono nel posto appropriato


Questo è il codice di definizione del TP, che invia il risultato a OrderSend. senza questo complesso algoritmo, i trade vengono inviati, ma non c'è modo di inviarli. chiamo la funzione TP = TakeLong(SHP);

 
forexpipsrunner: questo è il codice di definizione TP che dà il risultato a OrderSend . senza questo algoritmo le compravendite sono inviate, non c'è modo con esso

Ci sono molti modi di fare il debugging - il processo di trovare un errore quando si è stabilito che ce n'è uno. Il primo è F5 - avvia il debug in MetsEditor. 2) usa Alerts per tracciare l'esecuzione. 3 e 4) emettono informazioni di debug nelle etichette di testo e nella funzione Comment. Scegliete il modo conveniente e fate il debug di questa semplice funzione - poi diventerete un programmatore. Un programma con migliaia di linee è considerato complesso.

 
forexpipsrunner:

Puoi dirmi per favore se puoi scriverlo in questo modo. non vuole aprire le transazioni. forse il formato dei numeri calcolati è sbagliato? o qualche altro difetto nel codice?


int take=0 - restituisci un intero, questa variabile non dovrebbe essere un doppio?
 
Ciao, voglio fare un pattern "rail", ma non riesco a capire la dimensione del corpo della candela....

Calcolo la dimensione del corpo della candela come segue:
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1

Nel codice completo appare così

double Close1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);

MathAbs( Close1[i] - Open1[i] ) / Punto + 1
MathAbs( Close2[i] - Open2[i] ) / Punto + 1

if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}

È corretto? Come faccio a farlo funzionare?
 
sviter-pro:   Ciao, voglio fare un modello "rail", ma non riesco a capire la dimensione del corpo della candela....

Hai provato sul conto demo M1? Cosa si ottiene?

 
STARIJ:

Avete provato su un conto demo M1? Come funziona?

Non funziona niente....(((
 
void trailing(string symbol,string comment,int magic,int trail_p)
  {
   if(symbol==NULL) symbol=Symbol();
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic)
           {
            switch(OrderType())
              {
               case OP_BUY:
                  if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
               case OP_SELL:
                  if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
              }
           }
        }
        Comment("StopLoss=",OrderStopLoss());
     }
  }

Puoi dirmi perché il trawl si attiva ad ogni tick?

Motivazione: