[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 458

 
mamba5:

Pendant le test de l'EA, je reçois l'erreur 130 - mauvais arrêts. Dans la fonction NewOrder, les variables externes TakeProfit et StopLoss devraient être transmises, et il me semble que j'ai tout fait pour y parvenir, mais comme le montre l'impression, des zéros sont transmis. Je comprends que la raison de cette erreur se trouve ici, mais je n'ai pas encore réussi à la trouver. Aidez-moi, s'il vous plaît.

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)

Le problème ici est qu'il existe des variables globales StopLoss et qu'elles sont transmises à la procédure en tant que paramètres. Il est préférable de les renommer dans la procédure.

 
fore-x:

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

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

Zhunko:

Lignes de tendance.

Et plus de détails ? Au moins, donnez-moi un lien où lire ?
 
splxgf:

Le problème ici est qu'il existe des variables globales StopLoss et qu'elles sont également transmises à la procédure en tant que paramètres. Il est préférable de les renommer dans la procédure.


Vous avez raison. C'est vraiment plus logique. Corrigé :

//+----------Функция открытия ордера-----------------------------------+
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);
}
Mais ça n'a pas aidé beaucoup. TaPr et StLo= 100, mais PR, SL et TP sont nuls pour une raison quelconque.....
Dossiers :
 

Bonjour, pouvez-vous m'aider à écrire une condition pour que l'ordre ne s'ouvre qu'une seule fois, à ce stade, il s'ouvre à chaque 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);
                        }

J'ai juste besoin de faire quelque chose pour que cela ressemble à ceci : si j'ai déjà une commande passée, il n'en ouvrira pas une autre sans un OrderComment, je n'ai pas encore d'idée de ce qu'il faut faire avec ça

Merci d'avance

 
fore-x:
Que diriez-vous de plus de détails ? Au moins, donnez-moi un lien où lire ?
Quel lien ? Vous reliez les barres avec les lignes de tendance. Vous serez alors indépendant des tampons et de leurs défaillances.
 
artmedia70:
Si vous ne le mettez pas vous-même sur le graphique, il ne sera pas pris en compte par l'EA. Comment avez-vous fait ça ?
J'exécute l'EA dans le testeur. Lorsque le testeur se termine, l'information des lignes de l'indicateur apparaît.
 
mamba5:


Vous avez raison. C'est plus logique de cette façon. Corrigé :

Mais ça n'a pas aidé beaucoup. TaPr et StLo= 100, mais PR, SL et TP sont nuls pour une raison quelconque


  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);
   }
 

veuillez indiquer comment calculer les transactions déficitaires.

c'est-à-dire les transactions qui ont été fermées par un stop loss.

et réinitialiser le compteur après une transaction profitable.

C'est-à-dire après avoir clôturé sur Take Profit pour remettre le compteur à zéro.

Chiffre initial du compteur = 1

int Schetcik = 1;

Toutes les transactions, tant à l'achat qu'à la vente, doivent être comptabilisées.

 
Vinin:



Merci ! ))) Je n'ai pas pu voir l'erreur jusqu'à ce qu'on la compare clairement.
 
belck:

veuillez indiquer comment calculer les transactions déficitaires.

c'est-à-dire les transactions qui ont été fermées par un stop loss.

et réinitialiser le compteur après une transaction profitable.

C'est-à-dire après avoir clôturé sur Take Profit pour remettre le compteur à zéro.

Chiffre initial du compteur = 1

Toutes les transactions, tant à l'achat qu'à la vente, doivent être comptabilisées.


Fermer sur un stop loss ne signifie pas que la transaction est perdante, et vice versa. À moins, bien sûr, que les arrêts et les prises aient été fixés à l'ouverture et n'aient plus été touchés.