Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 549

 

La seguente costruzione abbreviata nel codice è corretta: a < b && ( c > d1 || c >d2 || c > d3) ?

Questo per evitare di scrivere: (a < b && c > d1) || (a < b && c > d2) ecc. molte volte.

 
HeAic:

La seguente costruzione abbreviata nel codice è corretta: a < b && ( c > d1 || c >d2 || c > d3) ?

Questo per evitare di scrivere: (a < b && c > d1) || (a < b && c > d2) e così via molte volte.

Certo che lo farà. L'unica cosa che farei quando scrivo costruzioni così grandi è specificare esplicitamente le parentesi di priorità:

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

Per i compilatori MT4/5, possiamo farlo senza le parentesi specificate, perché le priorità esistenti non ci permetteranno di calcolare il risultato dell'espressione in modo diverso. Ma queste parentesi hanno due vantaggi:

  1. L'espressione è più facile da capire visivamente senza domande sulle priorità (non ricordare le priorità per ogni compilatore).
  2. Se il codice viene spostato in un altro compilatore, che può avere priorità diverse, il codice funzionerà come nel compilatore corrente.
 
Alexey Viktorov:

Grazie, se

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

restituito il falce, non c'è nessun simbolo in Market Watch, come faccio ad aggiungerlo lì?

 
lil_lil:

Grazie, se

restituito il falce, non c'è nessun simbolo in Market Watch, come faccio ad aggiungerlo lì?

SymbolSelect()

Tutto è nella guida. Cursore sul nome della funzione e F1

 
Artyom Trishkin:

SymbolSelect()

Sta tutto nell'aiuto. Cursore sul nome della funzione e F1

Grazie.

 

Qual è la ragione di questo? Ho scritto uno script che imposta gli ordini limite in MT5. Quando lo invio al grafico nel terminale gli ordini non vengono impostati, anche se il result.retcode restituisce 10009(ordine eseguito)

 
iv1986:

Qual è la ragione di questo? Ho scritto uno script che imposta gli ordini limite in MT5. Quando lo invio al grafico nel terminale gli ordini non vengono impostati, anche se il result.retcode restituisce 10009 (ordine eseguito)

  1. Codice.
  2. Diario.
  3. Dichiarazioni.
Dov'è tutto questo?

 
Ihor Herasko:

  1. Codice.
  2. Diario di bordo.
  3. Dichiarazione.
Dov'è tutto questo?

{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;
se (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // tipo di operazione commerciale
request.symbol =Symbol(); // simbolo
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
se (richiesta.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; // tipo di ordine
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // prezzo di apertura
request.deviation=50; // deviazione consentita dal prezzo
request.sl =p; // posizione stop loss
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit position
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Ask;
OrderSend(richiesta,risultato);
}
se (p>Bid)
{
request.action =TRADE_ACTION_PENDING; // tipo di operazione commerciale
request.symbol =Symbol(); // simbolo
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
se (richiesta.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; // tipo di ordine
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // prezzo di apertura
request.deviation=50; // deviazione consentita dal prezzo
request.sl =p; // posizione stop loss
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit position
request.type_time=ORDER_TIME_DAY;
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(richiesta,risultato);

}

il log dice: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

 
iv1986:

Il log dice: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

Questo è scritto nel registro generale. E cosa c'è nel registro "Esperti"? E non solo una riga, ma l'intero registro. Non c'è molto da vedere attraverso il buco della serratura.

Inoltre, non c'è alcun controllo dei codici di ritorno nel codice citato. Quindi non è chiaro su quale base viene fatta la conclusione sul codice di errore.

Per consigliare qualcosa, bisogna avere dei passi chiaramente riproducibili (per vedere quello che si vede), e qui non ce ne sono. Tagliate la parte problematica del codice, eseguitelo voi stessi e poi mostrate esattamente cosa sta fallendo.

P. S. Per inserire il codice, usa l'icona "</>" o Alt+S.

 

Alla fine del codice ancheAlert(result.retcode);

nel registro generale:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) caricato con successo

2018.05.14 12:08:17.187 Trades '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Trades '992940': accettato acquisto limite 3.00 Si-6.18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Trades '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution

2018.05.14 12:08:17.546 Trades '992940': order #13235300 buy limit 3.00 / 3.00 Si-6.18 at 62091 done in 337.532 ms

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


Nella colonna degli esperti: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alert: 10009, niente altro