[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 846

 
serjik77:

Veuillez m'excuser si je vous distrais avec une question probablement stupide.

Je viens de commencer à apprendre et je n'ai personne à qui demander conseil.

J'ai lu le manuel à plusieurs reprises. J'ai commencé un Expert Advisor avec les fonctions les plus simples, les ordres en attente.

Je ne comprends toujours pas ce que je dois faire pour ouvrir des ordres une fois, et non à chaque tick.



Insérez une fonction comme celle-ci

int ChPos( int type_H_L) 
{
// возвращает кол-во позици которые открыты 
   int i;
   int col;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && type_H_L==OP_BUY && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_SELL && type_H_L==OP_SELL && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_BUYSTOP && type_H_L==OP_BUYSTOP && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_SELLSTOP && type_H_L==OP_SELLSTOP && OrderMagicNumber()== magic){count++;}
           
       }
    }   
return(count);
}

Dans votre code, vérifiez de cette façon, par exemple

if ( SignalLine > MainLine && ChPos(OP_BUY)==0 )
      { // если сигнальная линия выше основной и нет длинной позы . то закрыть короткую открыть длинную
         if (ChPos(OP_SELL)>0 ) ClosePosition(OP_SELL) ;
         OpenPosition(OP_BUY)  ;
 
Je ferme les positions non rentables sans rompre l'équilibre dans l'écart en supprimant les TP des ordres ouverts. Malheureusement, TP=0, bien que j'aie obtenu un message très ennuyeux dans le journal :
<br / translate="no"> 2010.09.12 21:34:53 2000.03.06 07:59 argent EURUSD,M5 : OrderModify error 1

code :

bool notakeprofit()
{   bool ok=true;
    int k=OrdersTotal();
    for (int i=k-1; i >=0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_368)
        {OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(0,Point), OrderExpiration(), CLR_NONE);
         }
    else;
       // { Print("OrderSelect() error - ",GetLastError()); ok=false;}
    }
return(ok);
}

En raison de la nécessité de s'assurer dans le code principal que tous les ordres de marché ont TP=0, je contrôle le résultat de cette fonction - ok, dans le code vous pouvez voir que ok - il ne change que lorsqu'il y a une erreur.

AIDEZ-MOI PLZ ! :)

merci d'avance

 
abolk:

Dans mon cas, la règle est la suivante : "Séparer les NON dans les noms, adjectifs et adverbes, s'il y a ou est censé y avoir une contradiction" http://www.rusyaz.ru/pr/od07.html - "faire" est un NON - le mot correct est " faire" (le mot surligné est une contradiction et est précédé d'un trait d'union).

vous interprétez mal la langue russe ( !). Un "pas" séparé serait écrit dans le cas de :

"faire" n'est PAS correct, mais mauvais. - c'est dans ce sens qu'il est compris comme étant opposé. Regardez les exemples de la règle.

Dans votre phrase, NOT doit être écrit avec une conjonction (le paragraphe 3 du paragraphe 88 de la même page s'applique) :

"to do" est mal orthographié, " to do" est correct .

 

Il existe un indicateur MACD standard. Comment l'utilise-t-on pour effectuer des tests sur l'historique ?

Y a-t-il un exemple ?

 
IgorM:
Je verrouille les positions perdantes pour ne pas rompre l'équilibre de la position mais je dois supprimer le TP, hélas, TP=0, même si je dois continuer à écrire de nombreuses fois dans mon journal :

code :

En raison de la nécessité de s'assurer dans le code principal que tous les ordres de marché ont TP=0, je contrôle le résultat de cette fonction - ok, dans le code vous pouvez voir que ok - ne change que lorsqu'il y a une erreur.

AIDEZ-MOI PLZ ! :)

merci d'avance

Peut-être pas NormalizeDouble(0,Point) mais NormalizeDouble(0,Digits)?

 
chief2000:

Peut-être pas NormalizeDouble(0,Point) mais NormalizeDouble(0,Digits)?


Merci, je l'ai trouvé moi-même, mais cela n'a pas résolu l'erreur n°1

 
IgorM:


Merci, je l'ai trouvé moi-même, mais ça n'a pas résolu l'erreur n°1.

La première chose que je ferais serait de substituer un autre nombre dans TP au lieu de zéro (pour éliminer l'erreur) pour m'assurer que c'est la raison.

 
chief2000:

La première chose que je ferais serait de substituer un autre nombre dans TP au lieu de zéro (pour éliminer l'erreur) pour m'assurer que c'est la raison.


cela fonctionnait bien jusqu'à ce que j'écrive cette fonction, maintenant j'appelle la fonction de Kim au lieu de OrderModify() :

void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0)

l'erreur a disparu

 

il existe un indicateur de type osma, le signal est inversé lors du franchissement de 0. comment puis-je le tester sur l'historique ?

 
ivandurak:


Insérer cette fonction

Et dans votre code, faites une vérification comme ceci

Excusez-moi, mais si je peux me permettre, une autre question ?

Je commence à comprendre quelque chose, mais pas tout.

La première fonction indique-t-elle à l'application combien d'ordres ouverts elle a ?

Veuillez me conseiller sur la manière de faire apparaître en permanence les deux seules personnes en attente,

indépendamment de ceux qui sont déclenchés.