成行注文を正しく発注するにはどうしたらよいですか? - ページ 2 123456789 新しいコメント Vladimir Karputov 2017.02.03 16:19 #11 Gennady Mazur: ああ、また、標準機能は、注文の実行、それらのファイリングをサポートしていますか?私は、ファイリングを決定する方法がなかったので、注文が実行したくない取引所に到達するまで開くためにSeaTradeを使用していました。SetTypeFillingSetTypeFilling充填による注文の種類 を設定する 自分に合ったものを設定する。 Denis Kirichenko 2017.02.03 16:20 #12 Gennady Mazur:はい、そして私はこのフォーラムの達人によって前のスレッドで保証されたこの情報は常に来る...ほとんど瞬時に...そしてサーバーが肯定的に答えるときにチケットが発行されない場合、注文は失敗していること 何をバカなことを言ってるんだ。OnTradeTransaction イベントも呼び出してみてください。どこかに、すべての貿易業務を聞くという例があるのですが。私の記憶違いでなければ、ロッシュはそこにいたはずだ。探してください... 一般的に、トレードの操作の間にポーズを挿入するのは良いアイデアです ;-) Gennady Mazur 2017.02.03 16:21 #13 Sergey Chalyshev:今ならここの達人も教えてくれますよ ))あなたの経験では、ここでそのような質問をするのは見苦しいです。 セルゲイ、はい、私は十分な経験を持っています.でも、学ぶのに遅すぎるということはありません......もし、以前に何かを誤解して、もしかしたら新しいものを導入していたとしたら......。このような質問は難しいことではなく、もしかしたら他の誰かが役に立つかもしれない・・・あるいは、すでにこのような問題に直面していて、今はすべてが5分で解決できるかもしれない。 Vladimir Karputov 2017.02.03 16:23 #14 Dennis Kirichenko: 何をバカなことを言ってるんだ。OnTradeTransaction イベントも参照してみてください。どこかに、すべての貿易業務に耳を傾ける例があった。私の記憶違いでなければ、Roshさんが投稿されたものです。検索してみると... 盗聴の例はOrderSendAsyncに あるはずです。 Gennady Mazur 2017.02.03 16:24 #15 Vladimir Karputov:SetTypeFillingSetTypeFilling充填による注文の種類 を設定する 自分に合ったものを設定する。 なるほど......質問には使い道があることがわかりました......ありがとうございます Gennady Mazur 2017.02.03 16:26 #16 Dennis Kirichenko: 何をバカなことを言ってるんだ。OnTradeTransaction イベントも参照してみてください。どこかに、すべての貿易業務を聞くという例があるのですが。私の記憶違いでなければ、Roshさんが投稿されたものです。探してください... 一般的に、トレードの操作の間にポーズを挿入するのは良いアイデアです ;-) もう冬眠しようかと思ったけど、それだと逃げ場がない...。 Denis Kirichenko 2017.02.03 16:30 #17 Gennady Mazur:もう冬眠を考えていたのですが、それだと逃げ場がない......。 ハイバネーションが必要なのは、取引 終了後ではなく、取引の合間なのです。そうでなければ、サーバー(ブローカー)はトレーダーの活動を好まないでしょう:-)) 最適な脱出方法は、トランザクションの到着を待つことです。トランザクション用語では「TRADE_TRANSACTION_DEAL_ADD」となります。ウラジーミル・カルプトフが 何度も書いている。枝も検索してください。 これは私が見つけた盗聴器です。//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) {//--- static int counter=0; // счетчик вызовов OnTradeTransaction() static uint lasttime=0; // время последнего вызова OnTradeTransaction()//--- uint time=GetTickCount();//--- если последняя транзакция была больше 1 секунды назад if(time-lasttime>1000) { counter=0; // значит, это новая торговая операция и можно сбросить счетчик if(IS_DEBUG_MODE) Print(" Новая торговая операция"); } lasttime=time; counter++; Print(counter,". ",__FUNCTION__);//--- результат выполнения торгового запроса ulong lastOrderID =trans.order; ENUM_ORDER_TYPE lastOrderType =trans.order_type; ENUM_ORDER_STATE lastOrderState=trans.order_state;//--- имя символа, по которому произошла транзакция string trans_symbol=trans.symbol;//--- тип транзакции ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type; switch(trans.type) { case TRADE_TRANSACTION_POSITION: // изменение позиции { ulong pos_ID=trans.position; PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f", pos_ID,trans_symbol,trans.price_sl,trans.price_tp); } break; case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса { PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST"); break; } case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки { ulong lastDealID =trans.deal; ENUM_DEAL_TYPE lastDealType =trans.deal_type; double lastDealVolume=trans.volume; //--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(HistoryDealSelect(lastDealID)) Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket); PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type), lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket); } break; case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_FILLED) { if(HistoryOrderSelect(lastOrderID)) Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket); } break; default: // прочие транзакции { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_PLACED) { if(OrderSelect(lastOrderID)) Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket); } break; }//--- тикет ордера ulong orderID_result=result.order; string retcode_result=this.GetRetcodeID(result.retcode); if(orderID_result!=0) PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result); } How do I open イベント処理 - OnTradeTransaction MetaEditor build 1490 Sergey Chalyshev 2017.02.03 16:31 #18 Dennis Kirichenko: 一般的に、トレードの間にポーズを入れるのは良いトーンです;-)あなたの笑顔の意味がわからないのですが?まさか、そんなことを言われるとは。何がポーズだ、冗談だろう? Sergey Chalyshev 2017.02.03 16:33 #19 Dennis Kirichenko: 一番良い方法は、取引の到着を待つことです。取引用語では「TRADE_TRANSACTION_DEAL_ADD」です。 これは私が見つけた盗聴器です。//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) {//--- static int counter=0; // счетчик вызовов OnTradeTransaction() static uint lasttime=0; // время последнего вызова OnTradeTransaction()//--- uint time=GetTickCount();//--- если последняя транзакция была больше 1 секунды назад if(time-lasttime>1000) { counter=0; // значит, это новая торговая операция и можно сбросить счетчик if(IS_DEBUG_MODE) Print(" Новая торговая операция"); } lasttime=time; counter++; Print(counter,". ",__FUNCTION__);//--- результат выполнения торгового запроса ulong lastOrderID =trans.order; ENUM_ORDER_TYPE lastOrderType =trans.order_type; ENUM_ORDER_STATE lastOrderState=trans.order_state;//--- имя символа, по которому произошла транзакция string trans_symbol=trans.symbol;//--- тип транзакции ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type; switch(trans.type) { case TRADE_TRANSACTION_POSITION: // изменение позиции { ulong pos_ID=trans.position; PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f", pos_ID,trans_symbol,trans.price_sl,trans.price_tp); } break; case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса { PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST"); break; } case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки { ulong lastDealID =trans.deal; ENUM_DEAL_TYPE lastDealType =trans.deal_type; double lastDealVolume=trans.volume; //--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(HistoryDealSelect(lastDealID)) Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket); PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type), lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket); } break; case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_FILLED) { if(HistoryOrderSelect(lastOrderID)) Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket); } break; default: // прочие транзакции { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_PLACED) { if(OrderSelect(lastOrderID)) Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket); } break; }//--- тикет ордера ulong orderID_result=result.order; string retcode_result=this.GetRetcodeID(result.retcode); if(orderID_result!=0) PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result); } ひどい(( Gennady Mazur 2017.02.03 16:35 #20 Dennis Kirichenko: 一番良い方法は、取引の到着を待つことです。取引用語では「TRADE_TRANSACTION_DEAL_ADD」です。 これは、私が見つけた盗聴器です。//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) {//--- static int counter=0; // счетчик вызовов OnTradeTransaction() static uint lasttime=0; // время последнего вызова OnTradeTransaction()//--- uint time=GetTickCount();//--- если последняя транзакция была больше 1 секунды назад if(time-lasttime>1000) { counter=0; // значит, это новая торговая операция и можно сбросить счетчик if(IS_DEBUG_MODE) Print(" Новая торговая операция"); } lasttime=time; counter++; Print(counter,". ",__FUNCTION__);//--- результат выполнения торгового запроса ulong lastOrderID =trans.order; ENUM_ORDER_TYPE lastOrderType =trans.order_type; ENUM_ORDER_STATE lastOrderState=trans.order_state;//--- имя символа, по которому произошла транзакция string trans_symbol=trans.symbol;//--- тип транзакции ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type; switch(trans.type) { case TRADE_TRANSACTION_POSITION: // изменение позиции { ulong pos_ID=trans.position; PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f", pos_ID,trans_symbol,trans.price_sl,trans.price_tp); } break; case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса { PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST"); break; } case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки { ulong lastDealID =trans.deal; ENUM_DEAL_TYPE lastDealType =trans.deal_type; double lastDealVolume=trans.volume; //--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(HistoryDealSelect(lastDealID)) Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket); PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type), lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket); } break; case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_FILLED) { if(HistoryOrderSelect(lastOrderID)) Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket); } break; default: // прочие транзакции { //--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей string Exchange_ticket=""; if(lastOrderState==ORDER_STATE_PLACED) { if(OrderSelect(lastOrderID)) Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID); if(Exchange_ticket!="") Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket); } PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type), lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket); } break; }//--- тикет ордера ulong orderID_result=result.order; string retcode_result=this.GetRetcodeID(result.retcode); if(orderID_result!=0) PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result); } はい、とても有益な情報です...お疲れ様 また、聞かず寝ないでいると、注文は正だがまだポジションがないときに、EAに待機していることを知らせる方法はないのでしょうか? 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ああ、また、標準機能は、注文の実行、それらのファイリングをサポートしていますか?私は、ファイリングを決定する方法がなかったので、注文が実行したくない取引所に到達するまで開くためにSeaTradeを使用していました。
SetTypeFilling
SetTypeFilling
充填による注文の種類 を設定する
自分に合ったものを設定する。
はい、そして私はこのフォーラムの達人によって前のスレッドで保証されたこの情報は常に来る...ほとんど瞬時に...そしてサーバーが肯定的に答えるときにチケットが発行されない場合、注文は失敗していること
OnTradeTransaction イベントも呼び出してみてください。どこかに、すべての貿易業務を聞くという例があるのですが。私の記憶違いでなければ、ロッシュはそこにいたはずだ。探してください...
一般的に、トレードの操作の間にポーズを挿入するのは良いアイデアです ;-)
今ならここの達人も教えてくれますよ ))
あなたの経験では、ここでそのような質問をするのは見苦しいです。
何をバカなことを言ってるんだ。
OnTradeTransaction イベントも参照してみてください。どこかに、すべての貿易業務に耳を傾ける例があった。私の記憶違いでなければ、Roshさんが投稿されたものです。検索してみると...
SetTypeFilling
SetTypeFilling
充填による注文の種類 を設定する
自分に合ったものを設定する。
何をバカなことを言ってるんだ。
OnTradeTransaction イベントも参照してみてください。どこかに、すべての貿易業務を聞くという例があるのですが。私の記憶違いでなければ、Roshさんが投稿されたものです。探してください...
一般的に、トレードの操作の間にポーズを挿入するのは良いアイデアです ;-)
もう冬眠を考えていたのですが、それだと逃げ場がない......。
最適な脱出方法は、トランザクションの到着を待つことです。トランザクション用語では「TRADE_TRANSACTION_DEAL_ADD」となります。
ウラジーミル・カルプトフが 何度も書いている。枝も検索してください。
これは私が見つけた盗聴器です。
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
一般的に、トレードの間にポーズを入れるのは良いトーンです;-)
あなたの笑顔の意味がわからないのですが?
まさか、そんなことを言われるとは。何がポーズだ、冗談だろう?
一番良い方法は、取引の到着を待つことです。取引用語では「TRADE_TRANSACTION_DEAL_ADD」です。
これは私が見つけた盗聴器です。
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
一番良い方法は、取引の到着を待つことです。取引用語では「TRADE_TRANSACTION_DEAL_ADD」です。
これは、私が見つけた盗聴器です。
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
また、聞かず寝ないでいると、注文は正だがまだポジションがないときに、EAに待機していることを知らせる方法はないのでしょうか?