Errori, bug, domande - pagina 2019

 
fxsaber:

È stato scritto molte volte. Non corretto per qualche motivo.

Ho visto che è già stato scritto che le frecce non sempre possono essere visualizzate immediatamente dopo una transazione. Anch'io ho aperto un'applicazione del genere. Ma per avere tali omissioni nella lista nella scheda Storia, non ho ancora visto alcun post.

P.S. E sì, dopo aver fornito prove e tutti i dati necessari per riprodurre il bug, per qualche motivo un completo ignorare per una settimana intera, anche se dall'inizio ha risposto, rifiutando di accettare che c'è un bug.

 
Anatoli Kazharski:

Ho visto scritto prima che le frecce non possono sempre apparire immediatamente dopo uno scambio. Anch'io ho aperto un'applicazione del genere. Ma non ho ancora visto tali omissioni nella lista della scheda Storia.

È necessario cambiare scheda diverse volte, poi la cronologia diventa corretta. È molto sgradevole durante il debug.

 
fxsaber:

Le schede devono essere cambiate diverse volte, poi la storia diventa corretta. È molto fastidioso durante il debug.

Sì, è molto fastidioso in alcuni casi durante lo sviluppo e il debug delle strategie di trading.

Non ho notato che cambiare le schede ha in qualche modo cambiato il contenuto della lista della cronologia:


 
Anatoli Kazharski:

Non ho notato che cambiare scheda cambia in qualche modo il contenuto della lista della cronologia:

Cliccate con il tasto destro e cambiate Deals/Order.

 
Anatoli Kazharski:

Sì, questo è un grande ostacolo in alcuni casi quando si sviluppano e si debuggano le strategie di trading.

Non ho notato che cambiare scheda ha cambiato il contenuto della lista della cronologia in alcun modo:


Esiste una cosa del genere. Mi salvo con un cursore di velocità e una pausa.
 
fxsaber:

Cliccate con il tasto destro e cambiate Transazioni/Ordine.

Sì, tali azioni ripristinano l'elenco della cronologia delle transazioni:


 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL4 MT4 MetaTrader 4".
 
Tutti i simboli reali nel conto hanno la forma "EURUSD.hello". Dopo aver creato un "EURUSD" personalizzato non ci saranno problemi nel copiare dal servizio Signals?
 

Aggiungere i seguenti valori

ENUM_DEAL_REASON

Identificatore

Descrizione

LIMITE_DI_RAGIONE_DI_AFFARI

L'affare è stato eseguito come risultato di un ordine limite che scatta

MOTIVO_AFFARE_MERCATO

L'affare è stato eseguito in seguito all'attivazione di un ordine di mercato

MOTIVO_AFFARE_STOP

L'operazione è stata eseguita come risultato di un ordine di stop che ha fatto scattare


Sembra che non sia necessario. Ma ci sono situazioni in cui l'ordine è stato parzialmente eseguito, creando un affare,nel qual caso DEAL_ORDER sarà trovato, ma non sarà nella tabella della storia, poiché l'ordine è ancora vivo.

In altre parole, per scoprire il tipo di ordine che ha causato l'affare, non è sempre utile fare riferimento alla cronologia degli ordini. Se non vogliamo fare un casino con la ricerca degli ordini tra quelli "vivi e morti", possiamo semplicemente aggiungere altri flag di esecuzione - dopo quelli esistenti, per mantenere la compatibilità con ENUM_ORDER_REASON eENUM_POSITION_REASON. Allo stesso tempo è auspicabile aggiungere gli stessi flag aENUM_POSITION_REASON per essere compatibili

POSITION_REASON_LIMIT  == DEAL_REASON_LIMIT
POSITION_REASON_MARKET == DEAL_REASON_MARKET
POSITION_REASON_STOP   == DEAL_REASON_STOP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
 

Una domanda su OrderCalcMargin è venuta fuori in un thread vicinohttps://www.mql5.com/ru/forum/216697/page3


Test: controlliamo 2 modi diversi di calcolare il deposito sostituendo diversi prezzi di apertura.

#define  TOSTRING(A) #A+" = "+(string)(A)
void OnStart()
  {
   double margin_1=999,price_1;

   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=10.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print(TOSTRING(price_1=1.0));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
   Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));
  }

// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin(const ENUM_ORDER_TYPE action,const string symbol,const double volume,const double price,double &margin)
  {
   double MarginInit,MarginMain;

   const bool Res=SymbolInfoMarginRate(symbol,action,MarginInit,MarginMain);

   margin=Res ? MarginInit*price*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)/
          (SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;

   return(Res);
  }

Ecco il LOG

LF      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 88.712
KP      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
CR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.712 margin_1= 26.19399834 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
ED      0       04:28:05.464    test (AUDJPY,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 88.7
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 88.7 margin_1= 26.1904551 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
EP      0       04:28:05.464    test (AUDJPY,H1)        price_1=10.0 = 10.0
HK      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HH      0       04:28:05.464    test (AUDJPY,H1)        price_1= 10.0 margin_1= 2.95270069 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
KN      0       04:28:05.464    test (AUDJPY,H1)        price_1=1.0 = 1.0
FS      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 26.19 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
PR      0       04:28:05.464    test (AUDJPY,H1)        price_1= 1.0 margin_1= 0.29527007 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

La funzione OrderCalcMargin non considera il prezzo di apertura nel calcolo del margine

Questo sembra essere legato al tasso di cambio della valuta quotata, che deve essere ricalcolato per il tempo e il prezzo di apertura.

Se la valuta quotata è USD (e anche la valuta del conto è USD), allora il margine calcolato cambierà in base al prezzo di apertura.

Log per GBPUSD

KK      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 1.32354
CR      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.12 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32354 margin_1= 44.118 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
GD      0       05:25:15.763    test (GBPUSD,H1)        price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 1.32341
LS      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NQ      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.32341 margin_1= 44.11366667 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
DG      0       05:25:15.763    test (GBPUSD,H1)        price_1=10.0 = 10.0
LM      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
NO      0       05:25:15.763    test (GBPUSD,H1)        price_1= 10.0 margin_1= 333.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
HM      0       05:25:15.763    test (GBPUSD,H1)        price_1=1.0 = 1.0
ED      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true
OD      0       05:25:15.763    test (GBPUSD,H1)        price_1= 1.0 margin_1= 33.33333333 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true

È un Bug o dovrebbe esserlo?

OrderCalcMargin и проблема с ним связанная.
OrderCalcMargin и проблема с ним связанная.
  • 2017.10.04
  • www.mql5.com
Один советник работает на счёте MetaQuotes-Demo на семи валютных парах и на трёх парах реальном счёте робо. Итого 10 экземпляров советника запущено...
Motivazione: