//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &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()); }
} //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &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()); } //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &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()); }
} //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ voidOnTradeTransaction(constMqlTradeTransaction &trans, constMqlTradeRequest &request, constMqlTradeResult &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()); } //+------------------------------------------------------------------+
皆さん、ごきげんよう。EAで注文削除を設定する方法を教えてください。
状況は次のとおりです。
異なる方向に2つの未決済注文を 出し、片方がトリガーされると同時にもう片方は削除され、出品されなくなる。
ご教示いただければ幸いです。
ありがとうございます。
その方法はいくつかあります。そのひとつがOnTradeTransactionの 利用です。
トランザクションを捕捉する際に
貿易取引取引追加
トランザクションを履歴に追加します。注文の執行または口座残高の取引の結果として実行される。
と、この取引が市場への参入であることを確認します。
DEAL_ENTRY_IN
市場参入
//| 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());
}
一般的なEAコード(ここだけはマジックに "0 "を指定しています。)
//| 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());
}
//+------------------------------------------------------------------+
OnDeinitイベントに関してもう一つ質問です。
このコードは動作します。
void OnDeinit(const int reason)
{
if(理由==REASON_REMOVE)
{
ポジションを閉じる コード(もしあれば)
}
}
一般的に、OnDeinit イベント処理でポジションを閉じることが可能かどうかを知る必要がある
こんにちは、専門家の皆さん、ご経験をお聞かせください。
つまり、このオブジェクト/フィールドを何らかの方法で指定するタスクがある場合、どのようなアクションが可能か、ということです。
例えば、xとyのセルが数千個になるような配列の場合、この配列をコホネン地図の ネットワークに入れるのは適切でしょうか?
2次元配列の1つ(次元数が大きい)をコホネンネットワークに貼り付ける方法を提案できるかもしれません。
また、Kohonが解析に適しているかどうか-配列の再帰性(配列の中の配列)。
あるいは、誰かが適切な質問をする手助けをしてくれるかもしれません。
その方法はいくつかあります。一つはOnTradeTransactionを 使用することです。
で、トランザクションをキャッチします。
貿易取引取引追加
トランザクションを履歴に追加します。注文の執行または口座残高の取引の結果として実行される。
と、この取引が市場への参入であることを確認します。
DEAL_ENTRY_IN
市場参入
//| 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());
}
一般的なEAコード(ここだけマジックが "0 "になっています。)
//| 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());
}
//+------------------------------------------------------------------+
ありがとうございます。しかし、MQL4ではどのように実装すればよいのでしょうか?すぐに指定しなかったことをお詫びします。
ありがとうございます。しかし、MQL4ではどのようにフォーマットすればいいのでしょうか?すぐに具体的な説明ができず、申し訳ありませんでした。
株や先物ではエラーになるのに、FXやコモディティでは問題ないのはなぜですか?
売り指値1.00 USDRUB_TOM at 63.8679 sl: 63.8829 tp: 63.8329 [無効な期限]を失敗しました。
株や先物ではエラーになるのに、FXやコモディティでは問題ないのはなぜですか?
売り指値1.00 USDRUB_TOM at 63.8679 sl: 63.8829 tp: 63.8329 [無効な期限]を失敗しました。
というパラメータを追加する必要があります。
こんにちは、同僚、私はmql5について質問があります。
今日建てたポジションの利益を計算する方法(昨日建てたポジションを今日決済した場合、このポジションは考慮されません) ?・・・・・・?
こんにちは、同僚、私はmql5について質問があります。
今日建てたポジションの利益を計算する方法(昨日建てたポジションを今日決済した場合、このポジションは考慮されません) ?・・・・・・?
明らかに、ポジションがオープンされた時刻と、その日の始まりの時刻を比較することによって。