Question pour les connaisseurs - page 12

 
rid писал(а) >>

Je ne suis pas vraiment un expert en la matière.

Mais l'hypothèse est que si après le premier signal vous "accrochez" le drapeau, alors laissez-le accrocher.

Même si le 1er signal est déjà épuisé !

Ensuite, le 2e signal donnera le signal d'ouverture sans problème.

Si j'ai bien compris la question...

Mais le drapeau est une variable, comme je le comprends, et avec un nouveau tick, le programme verra la valeur initiale ou nouvellement calculée du drapeau. Peut-être ai-je mal compris ce qu'est un drapeau ?

 
MQLBankir >> :

Mais un drapeau est une variable, comme je le comprends, et avec un nouveau tick, le programme verra la valeur initiale ou calculée du drapeau à partir des nouvelles données. Peut-être ai-je mal compris ce qu'est un drapeau ?

Un drapeau est une constante booléenne qui a une valeur vraie ou fausse, avec une représentation numérique de 1 ou 0 respectivement.

Si la condition 1 est signalée (comme le franchissement de 2 roues) alors le drapeau est mis à true, si le franchissement n'a pas encore eu lieu le drapeau restera false ! Pour votre tâche... cela ressemblerait à quelque chose comme ceci :

bool signal1=true ;

int start()

if (signal1==false) {return();}

signal1 ......... tra la obtenir le signal

if (signal1 ==true) //le premier signal apparaît

{

signal2 .............. tra la réception du signal

signal1=false ;

}

quelque chose comme ça devrait arriver ;)))

oh, au moment où j'écrivais, c'était déjà défini ci-dessous)

 
MQLBankir >> :

Mais un drapeau est une variable, comme je le comprends, et avec un nouveau tick, le programme verra la valeur initiale ou calculée du drapeau à partir des nouvelles données. Peut-être ai-je mal compris ce qu'est un drapeau ?

Je peux ajouter, que les variables déclarées globalement sauvegardent leurs valeurs.

>> jusqu'à ce qu'ils soient modifiés par la force ou que le programme soit fermé.

 

La protection du drapeau se fait de la manière suivante :

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
D'ailleurs
// функция принятия решения и установки флага

peut être n'importe où, selon l'idée de l'auteur, la séquence d'actions change.

 
Urain писал(а) >>

La protection du drapeau se fait de la manière suivante :

d'ailleurs

peut se trouver n'importe où, selon l'idée de l'auteur, et il modifie la séquence des actions.

>>Merci à tous, il semble avoir trouvé la solution))

 

Bonsoir. Les ennuis sont descendus de quelque part.

Un conseiller avec une martingale.

10 étapes. A chaque étape, la position a un magicien différent.

Au début, tout fonctionnait bien. Pendant plusieurs jours.

Cependant, tout à coup, il n'a plus fonctionné du tout !

La toute première position s'ouvre et immédiatement, sur la barre suivante, elle se ferme !

La raison n'est pas claire.


Et ça continue encore et encore. S'ouvre et se ferme.

Ça a commencé aujourd'hui. Tout d'un coup !

Voici le bloc de fermeture :

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

Peut-être que quelqu'un verra l'inexactitude ou l'erreur ? (par prix des positions ouvertes)

 

rid писал(а) >>

La raison n'est pas claire.

Quelqu'un verra-t-il soudain une inexactitude ou une erreur ?

Le problème ne vient probablement pas de ce code, mais de l'ouverture des positions ou du calcul de TakeProfit_Buy. Il est plus probable qu'il s'agisse de cette dernière.

S'il joue dans le testeur, l'impression devrait aider.

 

Je ne calcule pas TakeProfit_Buy - je le fixe simplement dans les paramètres externes.

extern int       TakeProfit_Buy=21;

Dans le testeur - la même merde. Mais par endroits. Au début, tout est normal.

Et puis cette merde apparaît. Et pas toujours.

Je vais devoir insérer un commentaire ou une empreinte...

D'ailleurs. Je n'ai jamais essayé d'utiliser ce genre de magie quand j'étais débutant, mais je n'ai jamais oublié.

 

Je crois que je me suis trompé. Et, bien sûr, pas du tout là où je cherchais à l'origine.

En plus de la fermeture ci-dessus, j'ai aussi celle-ci :

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

Il s'avère que la fonction drapeau
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
après son exécution est égal à 1, mais après que toutes les autres positions aient été fermées, il est toujours égal à 1 !Et bien sûr, lorsque la première position suivante avec le numéro magique = numéro magique est ouverte - elle est immédiatement fermée !

On ne sait pas pourquoi cette erreur n'est pas apparue pendant deux jours ?

//--------------------------------------------------------------

Aussi. Pouvez-vous me conseiller, - Comment puis-je faire fonctionner ce bloc correctement après tout ?

En d'autres termes, comment réinitialiser la fonction isCloseLastPosByTake() après avoir fermé toutes les positions ?

 
rid >> :

En d'autres termes, comment réinitialiser la fonction isCloseLastPosByTake() une fois que toutes les positions ont été fermées ?

D'après ce que je comprends, le temps d'ouverture d'une position fermée sur profit doit être plus long que celui des petits ordres restants, ajoutez cette condition et tout sera cool.

Raison: