[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 407

 
costy_:

LA BASE DU FLETCHING... :-)

et aussi une TENDANCE DE BASE ;))

si l'eur baisse et le dol baisse, plat


:-)
 
costy_:
les écarts de swap ont-ils été pris en compte dans la réflexion ?
Oui, c'est ça. C'est à cause des écarts. Pas de swaps, les positions sont courtes. Le conseiller expert doit donc être encore plus résistant pour que les bénéfices l'emportent sur les pertes. Merci, je vais l'essayer.
 
costy_:
Sur le fait qu'après le for...

Ouais.... Réponse "exhaustive". Chaque événement doit avoir une raison. Les professionnels, confrontés à certains dysfonctionnements, savent à quoi faire attention. J'ai parcouru l'algorithme plusieurs fois, mais je n'arrive pas à trouver la cause C'est pourquoi je me tourne vers les pros pour obtenir des conseils - quelle pourrait être la raison ?
 

J'essaie d'ouvrir un ordre en attente comme ceci :

//+---------Функция расчета лота---------------------------------------+
double GetLot(int Risk)
{
double Free=AccountFreeMargin() ;
double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED) ;
double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT) ;
double Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT) ;
double Step=MarketInfo(Symbol(),MODE_LOTSTEP) ;
double Lot=MathFloor(Free*Risk/100/One_Lot/Step)*Step ;
si(Lot<Min_Lot)Lot=Min_Lot ;
if(Lot>Max_Lot)Lot=Max_Lot ;
si(Lot*One_Lot>Free)retour(0.0) ;
retour(Lot) ;
}

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot)
{
double TP=0;//takeprofit
double SL=0;// stop loss
double PR=0;// prix
while(!IsTradeAllowed())Sleep(100) ;
if(TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL))
TakeProfit=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
if(StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL))
StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
si(Cmd==OP_BUYSTOP)
{
PR=NormaliserDouble(Demande,Chiffres) ;
if(TakeProfit>0)TP=NormalizeDouble(Ask+TakeProfit*Point,Digits) ;
si(StopLoss>0)SL=NormalizeDouble(Bid-StopLoss*Point,Digits) ;
}
if(Cmd==OP_SELLSTOP)
{
PR=NormalizeDouble(Bid,Digits) ;
si(TakeProfit>0)TP=NormalizeDouble(Bid-TakeProfit*Point,Digits) ;
si(StopLoss>0)SL=NormalizeDouble(Ask+StopLoss*Point,Digits) ;
}
tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE) ;
if(tic<0)Print("Erreur d'ouverture d'ordre :",GetLastError()) ; Print("Cmd-",Cmd, "Lot=",Lot, "PR=",PR, "SL=",SL, "TP=",TP) ;
retour(tic) ;
}

Quand je le vérifie, je reçois un message :

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15 : montant de lots invalide pour la fonction OrderSend

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15 : Erreur OrderSend 4051

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15 : Ordre erroné ouvert:405

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15 : Cmd-5Lot=0PR=1.4316SL=1.4419TP=1.4216

De toute évidence, il s'agit de quelque chose avec le calcul des lots, mais je ne comprends pas quoi)))) Veuillez me conseiller

 
LOA:

Yep.... Réponse "exhaustive". Chaque événement doit avoir une raison. Les professionnels, lorsqu'ils rencontrent un dysfonctionnement, savent ce qu'il faut rechercher. J'ai parcouru l'algorithme plusieurs fois, mais je n'ai pas trouvé la raison. C'est pourquoi je demande l'avis des pros - quelle peut être la raison ?

Eh bien, où est l'indicateur ? ! (Je devine par le marc de café tel. https://www.mql5.comhttps://www.mql5.com/ru/)

Si tu énumères tout, il n'y aura plus de lettres.

continue break return voir si et quand il y a une interruption pour et quand elle se produit. fonctionne avec l'ouverture de la barre....

"rencontrant certains problèmes, savoir à quoi faire attention" ils ne font pas attention mais commencent à déboguer, commencez à déboguer votre indicateur aussi, par exemple via print (en plus avec celui de quelqu'un d'autre et donc 15 pages de long, plus de 50 fonctions appelées...).

Print("дошли до инициализации, сделаем ресайз запишем все 0.0 size="+ArrayRange(buf,0)+" resize= "+ArrayResize(buf,Bars)+"  "+ArrayInitialize(buf,0.0)) ;

 

Bonjour.

J'ai créé un tableau :

double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};

Cependant, pour une raison quelconque, sa première valeur passe à zéro (-10,09 devient 0). J'ai trouvé un moyen de me sortir de cette situation en faisant ça :

double fibo[]={,-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};

Pouvez-vous me dire de quoi il s'agit ? J'ai très envie de comprendre.

Merci d'avance.

 
nemo811:

Bonjour.

J'ai créé un tableau :

Cependant, pour une raison quelconque, sa première valeur passe à zéro (-10,09 devient 0). J'ai trouvé un moyen de me sortir de cette situation en faisant ça :

Pouvez-vous me dire de quoi il s'agit ? J'ai très envie de comprendre.

Merci d'avance.

Je n'ai pas mis à zéro avec l'index = 0

double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};
Alert(fibo[0]);

2011.12.06 20:00:47 MA_TF AUDUSD,M30 : Alerte : -10.09


 

Voici la partie du code qui pose problème :

  if (FIBO)
   {
    double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};
    double fiboPoint = 0;
    for(i=1;i<ArraySize(fibo)+1;i++)
     {
      fiboPoint = NormalizeDouble(MinAsia+Asia*fibo[i],Digits);
      double v = 0;
      if (fibo[i]<0) v=(MathAbs(fibo[i])+1)*100;
      else v=fibo[i]*100;
      string kk;
      kk=StringConcatenate (DoubleToStr(fiboPoint,Digits)," / ",DoubleToStr(v,1),"%");
      string k=DoubleToStr (i,0);
      ObjectCreate (nameF+k, OBJ_TREND, 0,0,0,0,0,0,0);
      ObjectSet (nameF+k, OBJPROP_RAY, false);
      ObjectSet (nameF+k, OBJPROP_TIME1, TimeBegAsia);
      ObjectSet (nameF+k, OBJPROP_PRICE1, fiboPoint);
      ObjectSet (nameF+k, OBJPROP_TIME2, FlowTime);
      ObjectSet (nameF+k, OBJPROP_PRICE2, fiboPoint);
      ObjectCreate (nameFT+k, OBJ_TEXT, 0,0,0,0,0,0,0);
      ObjectSet (nameFT+k, OBJPROP_TIME1, TimeBegAsia);
      ObjectSet (nameFT+k, OBJPROP_PRICE1, fiboPoint);
      ObjectSetText (nameFT+k,kk,8,"Arial");
     }
   }

Voici le problème décrit ci-dessus : la ligne dérivée de la valeur -10.09 n'est pas tracée (elle prend la valeur de MinAsia).

 
nemo811:

Voici la partie du code qui pose problème :

tuz

for(i=0;i<ArraySize(fibo)/**/-/**/1;i++)
 
mamba5:

J'essaie d'ouvrir un ordre en attente comme ceci :

//+---------Функция расчета лота---------------------------------------+

Quand je le vérifie, je reçois un message :

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15 : montant de lots invalide pour la fonction OrderSend

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15 : Erreur OrderSend 4051

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15 : Ordre erroné ouvert:405

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15 : Cmd-5Lot=0PR=1.4316SL=1.4419TP=1.4216

De toute évidence, il s'agit de quelque chose avec le calcul des lots, mais je ne comprends pas quoi))). Veuillez me conseiller


Utilisez les fonctions longues et éprouvées pour ouvrir des ordres à la fois pour le testeur et pour le vrai revendeur.