[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 458

 
mamba5:

Durante il test dell'EA ottengo l'errore 130 - stop sbagliati. Nella funzione NewOrder dovrebbero essere passate le variabili esterne TakeProfit e StopLoss, e mi sembra di aver fatto di tutto per ottenere questo, ma come mostra la stampa vengono passati degli zeri. Capisco che la ragione di questo errore si trova qui, ma non sono ancora riuscito a trovarla. Per favore, aiutatemi.

extern int TakeProfit=100;
extern int StopLoss=100;

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

Il problema qui è che ci sono variabili globali StopLoss e vengono passate alla procedura come parametri. È meglio rinominarli nella procedura.

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

Zhunko:

Linee di tendenza.

E altri dettagli? Almeno datemi un link dove leggere?
 
splxgf:

Il problema qui è che ci sono variabili globali StopLoss e sono anche passate alla procedura come parametri. È meglio rinominarli nella procedura.


Hai ragione. È davvero più logico. Corretto:

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
Ma non ha aiutato molto. TaPr e StLo= 100, ma PR, SL e TP sono zero per qualche motivo.....
File:
 

Ciao, puoi aiutarmi a scrivere una condizione in modo che l'ordine si apra solo una volta, a questo punto si apre su ogni tick

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

Ho solo bisogno di fare qualcosa per renderlo simile a questo: se ho già un ordine già effettuato, non ne aprirà un altro senza un OrderComment, non ho ancora idea di cosa fare con questo

Grazie in anticipo

 
fore-x:
Che ne dite di maggiori dettagli? Almeno dammi un link dove leggere?
Quale collegamento? Si collegano le barre con le linee di tendenza. Allora sarete indipendenti dai buffer con i loro glitch.
 
artmedia70:
A meno che non lo mettiate voi stessi sul grafico, non si rifletterà durante l'EA. Come hai fatto?
Sto eseguendo l'EA nel tester e quando il tester finisce, appare l'informazione delle linee dell'indicatore.
 
mamba5:


Hai ragione. Ha più senso in questo modo. Corretto:

Ma non ha aiutato molto. TaPr e StLo= 100, ma PR, SL e TP sono zero per qualche motivo


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

per favore, consigliate come calcolare le transazioni in perdita.

cioè i trade che sono stati chiusi da uno stop loss.

e azzerare il contatore dopo un trade redditizio.

Cioè dopo aver chiuso su Take Profit per azzerare il contatore.

Cifra iniziale del contatore = 1

int Schetcik = 1;

Tutti gli scambi, sia di acquisto che di vendita, dovrebbero essere contati.

 
Vinin:



Grazie! ))) Non ha potuto vedere l'errore fino a quando non ha confrontato così chiaramente
 
belck:

per favore, consigliate come calcolare le transazioni in perdita.

cioè i trade che sono stati chiusi da uno stop loss.

e azzerare il contatore dopo un trade redditizio.

Cioè dopo aver chiuso su Take Profit per azzerare il contatore.

Cifra iniziale del contatore = 1

Tutti gli scambi, sia di acquisto che di vendita, dovrebbero essere contati.


Chiudere su uno stop loss non significa che il trade sia in perdita, e viceversa. A meno che, naturalmente, gli stop e i take non siano stati impostati all'apertura e non siano stati più toccati.