Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 697
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Buona giornata a tutti! Potete per favore consigliarmi come impostare la cancellazione di un ordine in un EA?
La situazione è la seguente:
Mettiamo 2 ordini pendenti in direzioni diverse, non appena uno di essi scatta, l'altro viene rimosso e non viene più esposto.
Sarei molto grato per qualsiasi aiuto.
Grazie.
Ci sono diversi modi per farlo. Uno di questi è usareOnTradeTransaction.
Nel catturare la transazione
AGGIUNGERE UNA TRANSAZIONE COMMERCIALE
Aggiungere la transazione alla cronologia. Eseguito come risultato dell'esecuzione di un ordine o di transazioni di saldo del conto.
e fare in modo che questa transazione sia un'entrata nel mercato:
DEAL_ENTRY_IN
Ingresso nel mercato
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
Questa transazione avrà luogo una volta che l'ordine pendente è scattato e la transazione è stata inserita nella storia.
Una volta che abbiamo catturato questa transazione, abbiamo solo bisogno di cancellare tutti i nostri restanti ordini in sospeso:
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
Codice EA comune (solo qui ho specificato la magia uguale a "0" - dovreste impostare la vostra magia):
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
Un'altra domanda sull'evento OnDeinit:
questo codice funzionerà:
void OnDeinit(const int reason)
{
se(motivo==REASON_REMOVE)
{
codice per chiudere la posizione(se presente)
}
}
In generale, abbiamo bisogno di sapere se è possibile chiudere la posizione nella gestione dell'evento OnDeinit
Buon pomeriggio esperti, per favore condividete le vostre esperienze.
C'è un array di valori, riflette qualche oggetto/campo, cioè se c'è un compito di designare questo oggetto/campo in qualche modo, quali sono le azioni possibili.
Per esempio, sarebbe opportuno mettere questa matrice nella rete di mappe di Kohonen, se il volume della matrice può raggiungere migliaia di celle di x e y?
Forse puoi suggerire come infilare uno degli array bidimensionali (con grande dimensionalità) in una rete Kohonen.
E se Kohon è adatto all'analisi - ricorsione degli array (array in un array).
O forse qualcuno può aiutare a porre le domande giuste
Ci sono diversi modi per farlo. Uno è usareOnTradeTransaction.
In catturiamo la transazione
AGGIUNGERE UNA TRANSAZIONE COMMERCIALE
Aggiungere la transazione alla cronologia. Eseguito come risultato dell'esecuzione di un ordine o di transazioni di saldo del conto.
e fare in modo che questa transazione sia un'entrata nel mercato:
DEAL_ENTRY_IN
Ingresso nel mercato
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
Questa transazione avrà luogo una volta che l'ordine pendente è scattato e la transazione è stata inserita nella storia.
Una volta che abbiamo catturato questa transazione, dobbiamo solo cancellare tutti gli ordini in sospeso:
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
Codice EA generico (solo qui ho specificato la magia uguale a "0" - dovreste impostare la vostra magia):
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
Grazie, ma come dovrebbe essere implementato in MQL4? Mi scuso per non aver specificato subito.
Grazie, ma come lo formatto per MQL4? Mi scuso per non essere stato subito più specifico.
Perché becco un errore nel mercato azionario e dei futures e tutto va bene nel forex e nelle materie prime?
fallito vendere limite 1.00 USDRUB_TOM a 63.8679 sl: 63.8829 tp: 63.8329 [scadenza non valida]
Perché becco un errore nel mercato azionario e dei futures e tutto va bene nel forex e nelle materie prime?
fallito vendere limite 1.00 USDRUB_TOM a 63.8679 sl: 63.8829 tp: 63.8329 [scadenza non valida]
è necessario aggiungere un parametro
Ciao colleghi, ho una domanda su mql5:
Come calcolare il profitto sulle posizioni aperte oggi (se la posizione è stata aperta ieri e chiusa oggi, allora questa posizione non viene presa in considerazione) ????
Ciao colleghi, ho una domanda su mql5:
Come calcolare il profitto sulle posizioni aperte oggi (se la posizione è stata aperta ieri e chiusa oggi, allora questa posizione non viene presa in considerazione) ????
Ovviamente, confrontando l'ora di apertura della posizione con l'ora di inizio della giornata.