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

 
MaxZ:

Je dois manquer quelque chose :



NewOrder a été traité merci, maintenant l'étape fonctionne.
 
SeALALex:

J'ai implémenté NewOrder, merci, maintenant la commande fonctionne.

Faites attention avec ce code. Il a été écrit à la volée et n'a pas été testé ! :)))

Et je n'ai écrit qu'une seule façon de résoudre votre problème.


Au fait, vous avez donné le code suivant plus tôt :

Болк открытия на бай
if(Buy==true) 
  {Buy=false;

   ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Que se passe-t-il s'il y a une requalification, par exemple ? Alors l'ordre BUY ne sera pas ouvert, alors que le signal pourrait être correct. Et dans quelques heures, vous verrez que le prix a beaucoup augmenté, mais que l'ordre d'achat n'a pas été ouvert à cause de la requote...

 
MaxZ:

Faites attention avec ce code. Il a été écrit à la volée et n'a pas été testé ! :)))

Et je n'ai écrit qu'une seule façon de résoudre votre problème.


Au fait, vous avez cité le code suivant plus tôt :

Que se passe-t-il s'il y a une requalification, par exemple ? Alors l'ordre BUY ne sera pas ouvert, alors que le signal pourrait être correct. Et vous verrez que le prix a beaucoup augmenté en quelques heures, mais que l'ordre d'achat n'a pas été ouvert à cause de la requote...


Et comment s'assurer contre cela ?

 
SeALALex:


et comment s'en protéger ?

La méthode la plus simple consiste à réécrire le code différemment :

Болк открытия на бай
if(Buy==true) 
  {ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask, Digits),5,SL,TP,Order,070177,0,Orange);
   if(ticket>0)
    { 
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
      {Buy=false;
       Print("BUY order opened : ",OrderOpenPrice());
       Alert("Buy Order for ",Symbol());
       SendMail("Buy Order "+Symbol()+" "+Ask,SL);     
       }
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   }

Tant que l'ordre n'est pas ouvert, le signal d'ouverture d'une position longue d'achat reste à l'état Vrai.

 
MaxZ:

Le moyen le plus élémentaire est de réécrire le code différemment :

Jusqu'à l'ouverture de l'ordre, le signal d'ouverture d'une position longue d'achat restera dans l'état Vrai.


Merci beaucoup ! Et merci beaucoup à Roman !

J'ai besoin d'augmenter le lot dans une série d'ordres d'achat ouverts sans marge (car la marge nous affecte parfois de telle manière qu'elle réduit le lot, et je n'en ai pas besoin), j'ai besoin d'une augmentation stricte d'une certaine taille dans une série d'ordres. C'est-à-dire que s'il y a une tendance selon un critère, un signal d'achat, puis selon le second critère, un signal d'achat supplémentaire apparaît et un ordre est ouvert ; après le premier critère, il y a encore un signal d'achat et selon le second, après une petite correction, un signal d'achat supplémentaire apparaît et un autre ordre est ouvert, mais avec un ordre plus grand (la taille est fixée dans les paramètres initiaux) ; après que tous les ordres d'achat soient fermés, il y a un signal de vente et tout recommence avec la taille initiale du lot.

S'il vous plaît, quel morceau de code devrait être montré ?

 
SeALALex:


Merci beaucoup ! Et merci beaucoup à Roman !

Mais je n'arrive toujours pas à faire en sorte qu'il augmente un lot d'un certain pas, j'ai besoin d'augmenter un lot dans une série d'ordres d'achat ouverts sans marge (parce que la marge diminue parfois beaucoup, et je ne veux pas cela), j'ai besoin d'une augmentation stricte d'une certaine taille dans une série d'ordres.

Si vous n'utilisez pas de marge dans le calcul des lots et que vous ne travaillez qu'avec des paramètres constants spécifiés, par exemple, dans les variables externes, les lots n'augmenteront en conséquence qu'avec des valeurs constantes. Le principe, par lequel le code peut être écrit, je l'ai donné ci-dessus.

SeALALex:


C'est-à-dire que s'il y a une tendance selon un critère, un signal d'achat, puis selon le second critère un signal d'achat supplémentaire apparaît - un ordre est ouvert, puis selon le premier critère le signal d'achat demeure et selon le second critère, après une petite correction le signal d'achat apparaît à nouveau et un ordre supplémentaire est ouvert, mais avec une taille plus grande (la taille est définie dans les paramètres initiaux) et après que tous les ordres d'achat soient fermés un signal de vente apparaît et alors tout recommence avec la taille initiale du lot.

S'il vous plaît, quel morceau de code avez-vous besoin de montrer ?

Vous avez des variables Lots, LotsInitial et LotsStep. Lorsque la tendance change, vous remettez les Lots à zéro et attribuez une valeur initiale à LotsInitial. Si la tendance se poursuit et qu'un signal a déjà été envoyé pour ouvrir un nouvel ordre, vous augmentez la variable Lots avec le pas LotsStep et ouvrez un ordre.

Vous semblez comprendre toute la logique, mais vous n'arrivez pas à la transformer en instructions "si". Pourquoi, je ne sais pas.

Peut-être que ceci peut aider :

extern LotsInitial = 0.5;
extern LotsStep    = 0.1;
       Lots;

int start()
{
   ...

   if ((Тренд окончен) && (Все ордера закрыты) && (Пришёл сигнал о возможном начале нового тренда))
      Lots = LotsInitial;
 
   if ((Тренд подтверждён) && (Коррекция) && (Пришёл ещё сигнал открыться по тренду))
      Lots += LotsStep;
  
   ...
}
 
MaxZ:

Si vous n'utilisez pas de marge dans le calcul des lots et que vous ne travaillez qu'avec des paramètres constants, définis par exemple dans des variables externes, les lots ne seront donc augmentés que par des valeurs constantes. Le principe, selon lequel le code peut être écrit, je l'ai donné ci-dessus.

Vous avez les variables Lots et LotsStep. Lorsque la tendance change, vous remettez Lots à zéro et attribuez une valeur initiale. Si la tendance se poursuit et qu'un signal a déjà été envoyé pour ouvrir un nouvel ordre, vous augmentez la variable Lots par incréments de LotsStep et ouvrez un ordre.

Vous voyez que vous comprenez toute la logique, mais pour une raison quelconque, vous ne pouvez pas la transformer en instructions si... Pourquoi, je ne sais pas.


Puis-je mettre une partie du code comme un fichier responsable de l'ouverture comme un fichier et vous regardez... Je l'ai fait, mais il semble qu'il y ait un problème avec le code que j'ai posté, il ouvre une étape de plus, mais pas tout à fait.
Dossiers :
 
SeALALex:

Je peux coller une partie du code responsable de l'ouverture en tant que fichier et vous regardez... collé mais il semble qu'il y ait un problème avec le code que j'ai posté, il ouvre une étape de plus mais de loin.

Vous auriez d'abord corrigé toutes les erreurs. Pourquoi ajouter quelque chose à votre EA s'il ne fonctionne pas sans ? Bien que ce code ne ressemble pas à un EA entièrement fonctionnel. Tu as dû en couper des parties et maintenant tu veux que je répare les erreurs. :)))

Par exemple, init() n'est pas fermé... Et une variable obscure : LastOrder...

Veuillez corriger ces erreurs.

 
MaxZ:

Vous feriez mieux de réparer toutes les erreurs d'abord. Pourquoi ajouter un élément au conseiller expert s'il ne fonctionne pas sans lui ? Le code ne semble pas avoir la fonctionnalité complète du conseiller expert. Tu as dû en couper des parties et maintenant tu veux que je répare les erreurs. :)))

Par exemple, init() n'est pas fermé... Et une variable obscure : LastOrder...

Veuillez corriger les erreurs.


Oui, je l'ai assemblé comme un jeu de construction semble fonctionner, maintenant va certainement essayer de plus ou moins conduire à une forme normale et sera mis en place
 
splxgf:


Il ne s'agit pas de ND. point est la taille du point, multiplié par zéro cinq il serait par exemple 0.00005, je ne vois pas l'intérêt de comparer ce nombre avec OrderClosePrice()-OrderTakeProfit(). Le TP ne garantit pas exactement le même prix de clôture. De plus, les conditions de contrôle seront différentes pour les Bais et les Selves.

Cette conception est plus fiable.



Merci ! !! Lecture. De plus, il y aura des conditions de test différentes pour les bai et les selves... Belle vérité ! !!