Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 549

 

La construction abrégée suivante du code est-elle correcte : a < b && ( c > d1 || c >d2 || c > d3) ?

C'est pour éviter d'écrire : (a < b && c > d1) || (a < b && c > d2) etc. de nombreuses fois.

 
HeAic:

La construction abrégée suivante du code est-elle correcte : a < b && ( c > d1 || c >d2 || c > d3) ?

C'est pour éviter d'écrire : (a < b && c > d1) || (a < b && c > d2) et ainsi de suite de nombreuses fois.

Bien sûr qu'il le fera. La seule chose que je ferais lorsque j'écris des constructions aussi grandes est de spécifier explicitement les crochets de priorité :

(a < b)  && ( c > d1 || c >d2 || c > d3)

Pour les compilateurs MT4/5, nous pouvons le faire sans les parenthèses spécifiées, car les priorités existantes ne nous permettront pas de calculer le résultat de l'expression d'une manière différente. Mais ces parenthèses ont deux avantages :

  1. L'expression est plus facile à comprendre visuellement sans se poser de questions sur les priorités (ne pas se souvenir des priorités pour chaque compilateur).
  2. Si le code est déplacé vers un autre compilateur, qui peut avoir des priorités différentes, le code fonctionnera de la même manière que dans le compilateur actuel.
 
Alexey Viktorov:

Merci, si

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

a renvoyé la faute, il n'y a pas de symbole dans Market Watch, comment puis-je l'ajouter là ?

 
lil_lil:

Merci, si

a renvoyé la faute, il n'y a pas de symbole dans Market Watch, comment puis-je l'ajouter là ?

SymbolSelect()

Tout est dans l'aide. Curseur sur le nom de la fonction et F1

 
Artyom Trishkin:

SymbolSelect()

Tout est dans l'aide. Curseur sur le nom de la fonction et F1

Merci.

 

Quelle en est la raison ? J'ai écrit un script qui fixe des ordres limités dans MT5. Lorsque je l'envoie au graphique dans le terminal, les ordres ne sont pas fixés, bien que le result.retcode renvoie 10009(ordre exécuté).

 
iv1986:

Quelle en est la raison ? J'ai écrit un script qui fixe des ordres limites dans MT5. Lorsque je l'envoie au graphique dans le terminal, les ordres ne sont pas fixés, bien que le result.retcode renvoie 10009 (ordre exécuté).

  1. Code.
  2. Journal.
  3. Déclarations.
Où est tout cela ?

 
Ihor Herasko:

  1. Code.
  2. Journal de bord.
  3. Statment.
Où est tout cela ?

{MqlTradeRequest request={0} ;
MqlTradeResult result={0} ;
double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID) ;
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK) ;
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS) ;
double p=NormalizeDouble(ChartPriceOnDropped(),digits) ;
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0,1)/0,1 ;
}
int V=75 ;
si (p<Ask)
{
request.action =TRADE_ACTION_PENDING ; // type d'opération commerciale
request.symbol =Symbol() ; // symbole
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)) ;
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) ;
}
request.type =ORDER_TYPE_BUY_LIMIT ; // type de commande
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits) ; // prix à l'ouverture
request.deviation=50 ; // écart admissible par rapport au prix
request.sl =p ; // position de Stop Loss
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits) ; // Position Take Profit
request.type_filling=ORDER_FILLING_IOC ;
request.type_time=ORDER_TIME_DAY ;
request.stoplimit=Ask ;
OrdreEnvoi(demande,résultat) ;
}
si (p>Bid)
{
request.action =TRADE_ACTION_PENDING ; // type d'opération commerciale
request.symbol =Symbol() ; // symbole
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)) ;
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) ;
} // volume
request.type =ORDER_TYPE_SELL_LIMIT ; // type de commande
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits) ; // prix à l'ouverture
request.deviation=50 ; // écart admissible par rapport au prix
request.sl =p ; // position de Stop Loss
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits) ; // Position de prise de profit
request.type_time=ORDER_TIME_DAY ;
request.type_filling=ORDER_FILLING_IOC ;
request.stoplimit=Enchère ;
OrdreEnvoi(demande,résultat) ;

}

le journal indique : 2018.05.14 10:12:38.187 Trades '992940' : vendre limite 3.00 Si-6.18 à 62066 (62065) sl : 62331 tp : 61267 placé pour exécution

 
iv1986:

Le journal indique : 2018.05.14 10:12:38.187 Trades '992940' : vente limite 3.00 Si-6.18 à 62066 (62065) sl : 62331 tp : 61267 placé pour exécution

Ceci est écrit dans le journal général. Et qu'est-ce qu'il y a dans le journal "Experts" ? Et pas seulement une ligne, mais tout le journal. Il n'y a pas grand-chose à voir par le trou de la serrure.

En outre, il n'y a pas de contrôle des codes de retour dans le code cité. Il n'est donc pas clair sur quelle base la conclusion concernant le code d'erreur est faite.

Pour conseiller quelque chose, vous devez avoir des étapes clairement reproductibles (pour voir ce que vous voyez), et il n'y en a pas ici. Coupez la partie du code qui pose problème, exécutez-le vous-même et montrez ensuite exactement ce qui ne fonctionne pas.

P. S. Pour insérer le code, veuillez utiliser l'icône "</>" ou Alt+S.

 

A la fin du code égalementAlert(result.retcode) ;

dans le journal général :

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) chargé avec succès

2018.05.14 12:08:17.187 Trades '992940' : achat limite 3.00 Si-6.18 à 62091 (62092) sl : 61821 tp : 62905

2018.05.14 12:08:17.484 Trades '992940' : accepté limite d'achat 3.00 Si-6.18 à 62091 (62092) sl : 61821 tp : 62905

2018.05.14 12:08:17.500 Trades '992940' : achat limite 3.00 Si-6.18 à 62091 (62092) sl : 61821 tp : 62905 placé pour exécution

2018.05.14 12:08:17.546 Trades '992940' : ordre #13235300 acheter limite 3.00 / 3.00 Si-6.18 à 62091 fait en 337.532 ms

2018.05.14 12:08:17.578 Scripts script LIMIT (Si-6.18,M15) supprimé


Dans la colonne Experts : 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alerte : 10009, rien d'autre




Raison: