FORTS: Per aiutare i principianti - pagina 4

 
Sergey Chalyshev:
Cosa ha a che fare questo con l'ava? Non può scrivere sul forum, è bannato per sempre.
Ok, non sapevo che ci fosse un divieto "parziale". È un peccato.
 
Sergey Chalyshev:
Cosa c'entra questo con l'ava? Non può scrivere sul forum, è bannato per sempre.

No, non è stato bandito.

Gli utenti banditi sono scritti in croce.

 
Andrey Khatimlianskii:

No, non è stato bandito.

Gli utenti vietati sono scritti in croce.

L'ho pensato anch'io, è meglio chiedere ai moderatori, loro lo sanno per certo.
 
Mikhail Filimonov:

Caratteristiche:

Ricezione della conferma (TRADE_RETCODE_PLACED ) nel codice di ritorno di OrderSend() e nel biglietto d'ordine,

e per la funzione OrderSendAsync() in OnTradeTransaction(), questo non significa affatto che

l'ordine è davvero ESPOSTO ad uno scambio.

Quindi è necessario un ulteriore controllo dello stato dell'ordine (come per altre azioni sull'ordine).

if ( OrderSend( request, result ) )
{
  if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/ru/docs/constants/structures/mqltraderesult

Dice che il biglietto viene riempito solo quando il tipo ditrade èTRADE_ACTION_PENDING.

Se l'operazione è TRADE_ACTION_DEAL, il biglietto d'ordine sarà restituito in result.order?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sì.
 
Sergei Vladimirov:
Sì.

Quando si verifica l'errore 10013 in risposta a OrderCheck()?

Ecco il codice del mio script:

   MqlTradeRequest   m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =Symbol();
   m_request.magic       =001;
   m_request.volume      =1.00;
   m_request.type        =ORDER_TYPE_SELL;
   m_request.type_filling=ORDER_FILLING_RETURN;
   if(!OrderCheck(m_request,m_check_result))
      Print(__FUNCTION__+": order check failed.");
   else
      Print(__FUNCTION__+": order check passed.");
   Print(__FUNCTION__+": symbol=",m_request.symbol,", operation=",m_request.type,", volume=",m_request.volume);
   Print(__FUNCTION__+": retcode=",m_check_result.retcode,", balance=",m_check_result.balance,", equity=",m_check_result.equity,", profit=",m_check_result.profit,
            ", margin=",m_check_result.margin,", margin_free=",m_check_result.margin_free,", margin_level=",m_check_result.margin_level,
            ", comment=",m_check_result.comment);

Ecco il registro che ricevo:

Check (RTS-6.16,M30)    OnStart: retcode=10013, balance=0.0, equity=0.0, profit=2.121995790965272 e-314, margin=0.0, margin_free=0.0, margin_level=0.0, comment=Invalid request
Check (RTS-6.16,M30)    OnStart: symbol=RTS-6.16, operation=1, volume=1.0
Check (RTS-6.16,M30)    OnStart: order check failed.
 
igorbel:

Quando si verifica l'errore 10013 in risposta a OrderCheck()?

Ecco il codice del mio script:

Ecco il registro che ottengo:

Passato quando aggiunto m_request.expiration =0, anche se l'aiuto dice:

Esecuzione dello scambio.

Ordine di trading per aprire una posizione in modalità Exchange Execution. Richiede 5 campi da specificare:

  • azione
  • simbolo
  • volume
  • tipo
  • tipo_riempimento

Puoi anche specificare campi magici e di commento.

 

Ma le stranezze non finiscono qui.

1 lotto Comprare:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25, margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

Margine per la transazione 211242.25, lo stesso del margine attuale - tutto corretto in quanto l'attuale posizione corta per RTS-6.16 è di 2 contratti. Margine iniziale per 1 contratto RTS-6.16 17388.75

Aggiungo un altro lotto.

2 lotti Comprare:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25, margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

Tutto ok, dato che la posizione attuale è 2 Sell, il margine rimane invariato.

Ora 3 contratti di acquisto:

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin=246019.75, margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

Valore del margine in una volta 246019,75. Come mai? Per 1 contratto solo 17k. E gli altri valori (anche nei casi precedenti)? Da dove vengono il capitale e l'equilibrio? Non ho nemmeno così tanto sul mio conto. anche margin_free è sbagliato, non parla di profitto.

Qualcuno può controllarlo per me, forse sto facendo qualcosa di sbagliato?


 
igorbel:

Passato quando ho aggiunto m_request.expiration =0, anche se lo dice nella guida:

Inizializza sempre tutte le variabili e le strutture con degli zeri subito dopo la dichiarazione. Avevi della spazzatura nel campo di scadenza, quindi hai avuto un errore.

MqlTradeRequest   m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory(m_request);
ZeroMemory(m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov:

Inizializza sempre tutte le variabili e le strutture con degli zeri subito dopo la dichiarazione. Avevi della spazzatura nel campo della scadenza, ecco perché hai avuto l'errore.

Grazie. Ma ho abbandonato OrderCheck(), è una funzione quasi inutile almeno su FORTS. Prima di tutto, dà risultati poco chiari. Ma anche quando i valori sono più o meno corretti, c'è sempre una probabilità che l'ordine venga rifiutato in borsa. Ecco perché dobbiamo guardare lo stato dell'ordineORDER_STATE_REJECTED e vedere anche il commento. Allora dobbiamo diminuire il volume dell'ordine e inviarlo di nuovo. Naturalmente, tutto questo non rende il trading più veloce, ma cosa possiamo fare?