Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 996

 
Le persone aiutano. Cercando di ottenere il prezzo al quale si è aperto uno scambio. All'inizio ho fatto trading attraverso CTrade ma trade.resultprice era uguale a zero. Ho iniziato a fare trading attraverso MqlTrade e result.price mostrava buoni risultati in Strategy Tester, ma era uguale a zero in Live. Ho provato con OnTradeTransaction, ma è troppo lento nel trading live e mostra zero quando l'auto-trading viene fermato. Quali sono i modi per ottenere il prezzo al quale l'operazione di acquisto è andata a buon fine?
 
mikhail_shmakov:
Le persone aiutano. Cercando di ottenere il prezzo al quale si è aperto uno scambio. All'inizio ho fatto trading attraverso CTrade ma trade.resultprice era uguale a zero. Ho iniziato a fare trading attraverso MqlTrade e result.price mostrava buoni risultati in Strategy Tester, ma era uguale a zero in Live. Ho provato con OnTradeTransaction, ma è troppo lento nel trading live mostrando zero e mostra l'ultimo prezzo di scambio quando l'auto-trading viene fermato. Quali sono i modi per ottenere il prezzo al quale è avvenuto l'acquisto?
struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
Cosa intende per "in scambi molto veloci"? OnTradeTransaction funziona per ogni operazione. Basta separare il tipo di transazione e prendere il prezzo in TRADE_TRANSACTION_DEAL_ADD
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

//+------------------------------------------------------------------+ 
//| Получает текущее количество отложенных ордеров с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 
int GetOrdersTotalByMagic(long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 
//--- пройдем по всем отложенным ордерам 
   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++; 
//--- 
   return(total); 
  }
Ciao colleghi programmatori. Per favore, aiutatemi a modificare questa funzione. La funzione da MQL5 Reference di cui sopra. Come farle calcolare il numero di tutte le posizioni aperte per un dato Magic?
 
Kolya32:
Ciao colleghi programmatori. Per favore, aiutatemi a modificare questa funzione. Ho già introdotto questa funzione in MQL5 Reference. Cosa devo fare per farle calcolare il numero di posizioni aperte per Magic?
Dovremmo almeno cambiare Ordini*** in Posizioni*** e poi controllare.
 
Alexey Viktorov:
Almeno cambia Ordini*** in Posizioni*** ovunque e poi controlla.

Sembra funzionare)) Possiamo aggiungere questa funzione a MQL5)) Anche se probabilmente è troppo presto, la testerò)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 

int GetPositionsTotalByMagic(long const magic_number)  
  { 
   ulong position_ticket; 
   int total=0; 
//--- пройдем по всем открытым позициям 
   for(int i=0;i<PositionsTotal();i++) 
      if((position_ticket=PositionGetTicket(i))>0) 
         if(magic_number==PositionGetInteger(POSITION_MAGIC)) total++; 
//--- 
   return(total); 
  } 
 
Kolya32:

Sembra funzionare)) Potete aggiungere questa funzione al manuale MQL5)) Anche se probabilmente è troppo presto, sto ancora testando)

Se si aggiunge ogni piccola cosa come questa al manuale, il manuale si trasformerà in una discarica. Scusa, non si tratta della qualità delle modifiche che hai fatto.
 
mikhail_shmakov:
Le persone aiutano. Sto cercando di ottenere il prezzo al quale si è aperto uno scambio. All'inizio ho usato CTrade, ma trade.resultprice era uguale a zero. Ho iniziato a fare trading attraverso MqlTrade e result.price mostrava buoni risultati in Strategy Tester, ma era uguale a zero in Live. Ho provato con OnTradeTransaction, ma è troppo lento nel trading live mostrando zero e mostra l'ultimo prezzo di scambio quando l'auto-trading viene fermato. Quali sono i modi per ottenere il prezzo al quale l'operazione di acquisto è andata a buon fine?

OrderSend invia un ordine. Poi dobbiamo aspettare la sua esecuzione e che il commercio corrispondente appaia nella storia.

Per fare tutto questo correttamente, bisogna essere bravi in OnTradeTransaction o scrivere codice piuttosto pesante per OrderSend una volta.

Nel secondo caso, CTrade funzionerà anche come desiderato.

 

Qual è l'analogo di Digits che restituisce il numero di cifre decimali dopo la virgola che determina la precisione della misurazione del prezzo del simbolo grafico selezionato ?

 
Aleksey Vyazmikin:

Qual è l'analogo di Digits che restituisce il numero di cifre decimali dopo la virgola che determina la precisione della misurazione del prezzo del simbolo grafico selezionato ?

SymbolInfoInteger("XXXYYY",SYMBOL_DIGITS);
 
Artyom Trishkin:

Grazie!