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

 
ToLik_SRGV:

Le bug est évident ; il ouvre des positions à chaque tick, puisque l'ordre perdant dans l'historique ne va nulle part, donc il le trouve à chaque tick et remplit les valeurs des variables de contrôle avec les mêmes valeurs, et ensuite le bloc d'ouverture des transactions se déclenche.


Comment faire en sorte qu'il ne cherche pas à nouveau, ou plutôt qu'il ne cherche pas quelque chose qui a déjà été élaboré.

[Supprimé]  
FoxUA:

Comment faire pour qu'il ne le cherche pas à nouveau, ou plutôt qu'il ne cherche pas quelque chose qui a déjà été travaillé ?

Enlevez ce bloc :

for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
 OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; 
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
            
            
         }
      }

Et le remplacer par celui-ci :

   for(int cnt=OrdersHistoryTotal();cnt>0;cnt--){
      static int num_ticket;
      if(!OrderSelect(cnt-1, SELECT_BY_POS, MODE_HISTORY))break;
      if(OrderMagicNumber()== mag && OrderSymbol()==Symbol()){      
      if(num_ticket != OrderTicket())num_ticket = OrderTicket(); else break;
         if(OrderType() == OP_BUY){
            b=1;
            if(OrderClosePrice()==OrderTakeProfit())bt=1;
            if(OrderClosePrice()==OrderStopLoss())bs=1;
            bl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
         if(OrderType() == OP_SELL){
            s=1;
            if(OrderClosePrice()==OrderTakeProfit())st=1; 
            if(OrderClosePrice()==OrderStopLoss())ss=1;
            sl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
      }
   }

Il se distingue notamment par le fait qu'il mémorise le numéro du ticket de la dernière transaction perdante, le vérifie et n'autorise pas l'ouverture par le même signal.

 
ToLik_SRGV:

Jetez cette unité :


Merci beaucoup pour le test. Ça semble fonctionner.

 
Abzasc:

Quelque chose comme ça, je suppose.

SZY Le bouton d'insertion de code "SRC" est peu pratique à utiliser, il n'est pas facile à lire.


Merci beaucoup ! j'ai écrit int pour UseHourTrade2 au lieu de boole ;))
[Supprimé]  

Bonjour, mes amis.

Je souhaiterais vous consulter sur cette question :

Je travaille actuellement sur un indicateur, qui transfère à la fenêtre de la première paire de devises les lectures (ZigZag), formées sur la seconde paire de devises.

Mais, j'ai rencontré un problème :

par exemple, s'il y a un grand "écart" entre les guillemets : une paire est cotée à 1,4237, et l'autre à 0,8345, alors ces indicateurs apparaissent "éparpillés" sur l'écran, ce qui n'est pas très pratique visuellement ...

Comment effectuer la conversion de l'indicateur "coordonnées" de la deuxième paire, en tenant compte des cotations de la première paire (comment rendre le prix "relatif") ?

Merci beaucoup d'avance pour les conseils, les recommandations.

 
Morzh09:

Bonjour, mes amis.

J'aimerais vous consulter sur cette question :

Je travaille actuellement sur un indicateur, qui transfère à la fenêtre de la première paire de devises les lectures (ZigZag), formées sur la seconde paire de devises.

Mais, j'ai rencontré un problème :

par exemple, s'il y a un grand "écart" entre les guillemets : une paire est cotée à 1,4237, et l'autre à 0,8345, alors ces indicateurs apparaissent "éparpillés" sur l'écran, ce qui n'est pas très pratique visuellement ...

Comment effectuer la conversion de l'indicateur "coordonnées" de la deuxième paire, en tenant compte des cotations de la première paire (comment rendre le prix "relatif") ?

Merci beaucoup d'avance pour les conseils, les recommandations.

Regardez le lien. La mise à l'échelle elle-même y est faite de manière originale.

https://www.mql5.com/ru/code/7933

 

Bonjour !

Pouvez-vous me dire comment simplifier cela ?

si (Balance > 600)

{

Lot_mod = 0,1 ;

}

si (Balance > 700)

{

Lot_mod = 0,11 ;

}

si (Balance > 800)

{

Lot_mod = 0,12 ;

}

si (Balance > 900)

{

Lot_mod = 0,13 ;

}

Et ainsi de suite.... Parce que c'est trop tentaculaire sous cette forme.

Merci !

 
Lim1:

Bonjour !

Pouvez-vous me dire comment simplifier cela ?

Et ainsi de suite.... C'est trop tentaculaire sous cette forme.

Merci !





Une équation de la forme y=a*x+b sera utile.
 
Lim1:

Bonjour !

Pourriez-vous me dire comment simplifier cela ?





déterminer la formule de calcul du lot et c'est tout, sinon vous devrez vous préoccuper de
 

Lim1, essayez comme ceci :

int BalanceExcessIn100s = MathFloor( ( Balance - 600 ) / 100.01 );
Lot_mod = BalanceExcessIn100s * 0.01 + 0.1;