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

 
artmedia70:

Ici, vous avez

void OpenBuy() {

double dStopLoss = 0, dTakeProfit = 0 ;
double Lots_New = Lot ;

si (isLossLastPos(NULL, -1, MAGIC))
Lots_Nouveaux *= 2 ;
sinon si (!isLossLastPos(NULL, -1, MAGIC))

Lots_Nouveau = Lot ;

Il s'agit d'une fonction, et au tout début de cette fonction, vous attribuez à la variable Lots_Nouveau la valeur = Lot ;

Pensez à la façon dont il changera par la suite si vous le ramenez toujours à son état d'origine ?

Où t'ai-je dit de l'écrire ? Dans les variables externes avant la fonction de démarrage...

Et normaliser la valeur du lot à la taille correcte :

Lots_New = NormalizeLot(Lot*2, False, "") ;




Merci beaucoup !

Pouvez-vous également nous dire si vous pouvez ajouter une valeur de lot à chaque ordre perdant ultérieur ? Vous pouvez utiliser quelque chose comme ceci

1 lot 0.01

2 lots 0,01

3 lots 0.02

4 lots 0,03

5 lots 0,07

.....

15 lot 1.2

Pouvoir changer la valeur du lot dans le code.

Et que dans le cas où une affaire s'avérerait rentable, tout reviendrait au point de départ.

Je vous remercie d'avance.

Merci.

 
Necron:
Roger, merci, mais ça ne fonctionne toujours pas correctement. J'ai essayé d'ajouter un autre trailing stop, mais l'erreur est toujours là :( Y a-t-il une différence entre un trailing stop pour une position et un trailing stop pour plusieurs positions à la fois ?

Cela ne fait aucune différence en principe.
Essayez ma fonction, c'est assez simple, passez comme paramètres, medjic, et le chalut désiré.
L'appel de cette fonction est effectué au départ, à n'importe quel endroit, pour autant qu'il y "gicle" à chaque tic-tac.

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

Il est évident que les commandes doivent avoir des curseurs différents.

 
Dites-moi pourquoi ça ne marche pas :

OrderSelect(1,SELECT_BY_POS,MODE_TRADES) ;

code d'erreur 4051. Il y a un ordre OP_BUY ouvert.
Dossiers :
ma_1.mq4  3 kb
 
itum:

Aidez-moi à résoudre un problème !


Je recherche les ordres qui sont ouverts ou en attente. S'ils sont disponibles, je détermine l'ordre d'achat ou de vente. Sous certaines conditions (si l'un est plus grand que l'autre ou plus petit que le troisième), je veux fermer cet ordre. Modifiez ses paramètres et ouvrez-le à nouveau.

Le problème est qu'il y a toujours un signal pour fermer l'ordre et pour l'ouvrir. C'est pourquoi ma commande est fermée et ouverte à nouveau, et ainsi elle s'ouvre et se ferme ... )))

Comment résoudre ce problème ? Ga
Je pense que c'est du déjà vu... Suis-je le seul ? Vous avez déjà eu plusieurs réponses... Hein ?
Mettez votre code avec les conditions d'ouverture et d'ouverture ici. Nous allons mettre le doigt dessus... :)
 
an11:
Dites-moi pourquoi ça ne marche pas :

OrderSelect(1,SELECT_BY_POS,MODE_TRADES) ;

code d'erreur 4051. Il y a un ordre OP_BUY ouvert.

Le décompte des nombres dans la fonction OrderSelect() commence à zéro. Et vous avez 1, ce qui signifie que vous recherchez le deuxième ordre, bien que vous n'en ayez qu'un seul sur le marché, c'est pourquoi cela ne fonctionne pas.

 
Vinin:
Vous pouvez le faire avec des paramètres, mais pas avec des modèles. Vous devez d'abord définir les critères. Similaire, pas similaire. Et si elle est similaire, dans quelle mesure. Au moins de combien (pourcentages). Dans un cas, la composante temps, dans l'autre - la composante prix. Comment les mettre en corrélation les uns avec les autres. Bien que je puisse attacher une couche neuronique. La couche de Kohonen le fait très bien.

J'ai 12 variantes d'un modèle dans un de mes indicateurs, le modèle est le même mais les valeurs sont toujours différentes et leur ratio est différent ;)), ....). Je n'ai jamais travaillé avec des réseaux neuronaux, je pense que mon expérience dans l'écriture d'algorithmes élémentaires à l'aide de mql ne sera pas suffisante, bien qu'elle puisse m'aider à résoudre le problème. J'ai fait face à cette tâche plus tôt en remplaçant "barbarement" Kohonen, en écrivant tous les paramètres dans Exxel au moment de l'apparition du motif et le résultat si l'affaire s'ouvrait, puis en utilisant l'analyse Exxel je devais rechercher plus de correspondances en corrélation avec la rentabilité. Dans tous les cas, j'ai obtenu quelque chose et le système a défini le motif de manière judicieuse, mais ce n'était quand même pas très intelligent).
 
cyclik33: ...

Je ne sais pas quelle fonction vous utilisez, mais l'idée générale est la suivante : puisque votre pas n'est pas régulier, je suggère d'utiliser un tableau, vous y inscrivez les volumes dont vous avez besoin, puis vous utilisez la fonction pour parcourir sa valeur.

Exemple sur mon code :

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
Exemple d'appel de fonction :
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
Je pense que c'est du De ja vu... Suis-je le seul ? Plusieurs personnes vous ont déjà répondu... Hein ?
Mettez votre code avec la condition d'ouverture et l'ouverture de la pose. Nous allons mettre le doigt dessus... :)
Moi aussi :)))) Valentin, pour une raison quelconque ne veut pas montrer le code, probablement ne veut-il pas montrer ses idées...
 
ToLik_SRGV:

Je ne sais pas quelle fonction vous utilisez, mais voici une idée générale : comme votre terrain n'est pas plat, je suggère d'utiliser un tableau, vous y inscrivez les volumes dont vous avez besoin et vous utilisez ensuite la fonction pour parcourir les valeurs.

Exemple sur mon code :

Exemple d'appel de fonction :

Merci beaucoup !!!!!

J'utilise aussi votre code (et il fonctionne bien d'ailleurs), mais j'ai voulu installer le code Artemis dans un autre EA, d'abord, parce que j'ai eu plus de problèmes avec lui, et il y avait une question de principe, pourquoi il ne fonctionnait pas correctement.

Encore une fois, merci beaucoup ! !!! Je vais l'essayer maintenant !

 

La question peut être triviale, l'Expert Advisor négocie sur M1, le signal d'ouverture d'un ordre est arrivé, supposons que le stop est court et que l'ordre a été clôturé sur le sl. mais la condition pour ouvrir un ordre existe toujours.

Quelle est la meilleure façon de s'assurer que la commande ne sera pas ouverte à nouveau à la même minute ?

Raison: