記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第22部): 取引クラス - 基本取引クラス、制限の検証"についてのディスカッション - ページ 2 123 新しいコメント Alexey Viktorov 2019.10.06 13:09 #11 Artyom Trishkin:イベント処理の 後、イベント・タイプ・チェック・モジュールの最後で、last_event 変数に何が入っていますか?それをEAでリセットする必要がある。そして、ライブラリの最後のイベントをリセットするメソッドを強制的に呼び出すのではなく、イベントをチャートに送信し、イベントのリストに書き込んだ直後に、ライブラリ自身がそれを呼び出します。 そうです。私が見落として、最後に1行も書いていなかっただけです。 last_event = engine.LastTradeEvent(); Artyom Trishkin 2019.10.06 13:13 #12 Alexey Viktorov:ええ、ただ最後の一行を見逃していました。 TRADE_EVENT_NO_EVENTと同じにすればいい。 Alexey Viktorov 2019.10.06 13:37 #13 Artyom Trishkin: TRADE_EVENT_NO_EVENTと同じにすればいい。 これは機能しない。ティック ごとに表示されます。注文は5ティック目に有効化され、ログに "1 "と4回表示され、その後すべてのティックに "20 "と表示されます。 //--- 最後の取引イベントが変更された場合 if(engine.LastTradeEvent() != last_event) { last_event=engine.LastTradeEvent(); switch(last_event) { case TRADE_EVENT_PENDING_ORDER_PLASED : Print(__FUNCTION__, "***", last_event); break; case TRADE_EVENT_PENDING_ORDER_REMOVED : break; case TRADE_EVENT_PENDING_ORDER_ACTIVATED : { Print(__FUNCTION__, "***", last_event); //OrderActivated(); break; } case TRADE_EVENT_POSITION_OPENED : break; case TRADE_EVENT_POSITION_CLOSED : break; //--- default : break; } last_event = TRADE_EVENT_NO_EVENT; } Artyom Trishkin 2019.10.06 14:39 #14 Alexey Viktorov:うまくいかない。ティック ごとに表示されます。注文は5ティック目に有効化され、ログに "1 "と4回表示され、その後各ティックに "20 "と表示されます。 何を作成したのか確認する必要があります。Expert Advisorのテストでは動作します。私は携帯電話からです。あと5時間くらいで行きます。 Alexey Viktorov 2019.10.06 14:49 #15 Artyom Trishkin: あなたが何をしたのか見る必要がある。テストアドバイザーではうまくいっています。 今、携帯からです。あと5時間はそこにいない。 まだ何も書いていない。前の記事のコードの上はこれだけです。//--- 最後の取引イベントの初期化 static ENUM_TRADE_EVENT last_event = WRONG_VALUE; //--- テスターで作業する場合 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } OP_SELLLIMITとOP_SELLSTOPの2つの注文を出す。 Artyom Trishkin 2019.10.06 15:05 #16 Alexey Viktorov:まだ何も作っていない。前のメッセージのコードの上はこれだけです。 そしてコードの下には、OP_SELLLIMITとOP_SELLSTOPの2つの注文があります。 コード全体を見る必要があります。プライベート・メッセージに書くか、7つのシールに隠された秘密でなければここに書いてください。 Alexey Viktorov 2019.10.06 15:26 #17 Artyom Trishkin: コード全体を見たいんだ。プライベート・メッセージに書くか、7つの封印に隠された秘密でなければここに書いてくれ。 そこにはまだ何もない。 /********************************************************************\ |Only_BUY_or_only_SELL.mq4 | |© 2019, Alexey Viktorov | |https:mql5.com/ru/users/aleey Viktorov | https: //www.mql5.com/ru/users/alexeyvik/news| \********************************************************************/ #property copyright "© 2019, Alexey Viktorov" #property link "https://www.mql5.com/ja/users/alexeyvik/news" #property version "1.00" #property strict #define ndd(A) NormalizeDouble(A, _Digits) //--- #include <DoEasy\Engine.mqh> CEngine engine; //--- enum MY_ORDER_TYPE { BUY = OP_BUY, SELL = OP_SELL, }; struct POZ { double profit; ulong ticket; double priceGrid; double price; }poz[]; sinput MY_ORDER_TYPE ordType = SELL; // 貿易の方向性 sinput double lot = 0.01; // 敷地面積 input int StepGrid = 50; // グリッド間隔 input double desiredProfit = 10; // 望ましい利益 sinput bool Should_I_open = false; // 新しいポジションシリーズを開設すべきでしょうか? sinput int magick = 1; // マジックナンバー //--- int slip = 100; double contract, stepGrid, priceGrid; int totalPositions, levelNumb;//, levelBUY, levelSELL; /*******************Expert initialization function*******************/ int OnInit() { stepGrid = StepGrid*_Point; return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { //--- 最後の取引イベントの初期化 static ENUM_TRADE_EVENT last_event = WRONG_VALUE; //--- テスターで作業する場合 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } //--- 最後の取引イベントが変更された場合 if(engine.LastTradeEvent() != last_event) { //Print(__FUNCTION__, "***", last_event); last_event=engine.LastTradeEvent(); switch(last_event) { case TRADE_EVENT_PENDING_ORDER_PLASED : Print(__FUNCTION__, "***", last_event); break; case TRADE_EVENT_PENDING_ORDER_REMOVED : break; case TRADE_EVENT_PENDING_ORDER_ACTIVATED : { Print(__FUNCTION__, "***", last_event); //OrderActivated(); break; } case TRADE_EVENT_POSITION_OPENED : break; case TRADE_EVENT_POSITION_CLOSED : break; default : break; } last_event = TRADE_EVENT_NO_EVENT; } if(Should_I_open && OrdersTotal() == 0) { priceGrid = ndd(ordType == SELL ? Bid+stepGrid/2 : Bid-stepGrid/2); ENUM_ORDER_TYPE type = ENUM_ORDER_TYPE(ordType == OP_SELL ? OP_SELLLIMIT : OP_BUYSTOP); if(OrderSend(_Symbol, type, lot, priceGrid, slip, 0.0, 0.0, (string)priceGrid, magick) <= 0) Print(__FUNCTION__, GetLastError()); priceGrid = ndd(ordType == SELL ? Bid-stepGrid/2 : Bid+stepGrid/2); type = ENUM_ORDER_TYPE(ordType == OP_SELL ? OP_SELLSTOP : OP_BUYLIMIT); if(OrderSend(_Symbol, type, lot, priceGrid, slip, 0.0, 0.0, (string)priceGrid, magick) <= 0) Print(__FUNCTION__, GetLastError()); } return; }/*******************************************************************/ void OrderActivated() { Print(__FUNCTION__, "***", ENUM_TRADE_EVENT(engine.LastTradeEvent())); }/*******************************************************************/ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- 最後の取引イベントの初期化 static ENUM_TRADE_EVENT last_event=WRONG_VALUE; //--- テスターで作業する場合 if(MQLInfoInteger(MQL_TESTER)) { engine.OnTimer(); } //--- 最後の取引イベントが変更された場合 if(engine.LastTradeEvent()!=last_event) { last_event=engine.LastTradeEvent(); } }/*******************************************************************/ /***************************Timer function***************************/ void OnTimer() { if(!MQLInfoInteger(MQL_TESTER)) engine.OnTimer(); }/*******************************************************************/ void OnDeinit(const int reason) { Comment(""); }/*******************************************************************/ Artyom Trishkin 2019.10.06 16:09 #18 Alexey Viktorov:まだ何もない 答えを得るためには、あなたのコードを実行しなければならない。そうしたらまた連絡するよ。 Alexey Viktorov 2019.10.06 16:24 #19 Artyom Trishkin: 答えを得るためには、あなたのコードを実行しなければならない。すぐに行く。 あなたが家にいないことは知っているし、急かすつもりもない。 Artyom Trishkin 2019.10.06 16:53 #20 Alexey Viktorov:あなたが家にいないことは知っているし、急かしているわけでもない。 いや、それどころか、仕事中じゃなくて家にいるんだ。) 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
イベント処理の 後、イベント・タイプ・チェック・モジュールの最後で、last_event 変数に何が入っていますか?それをEAでリセットする必要がある。そして、ライブラリの最後のイベントをリセットするメソッドを強制的に呼び出すのではなく、イベントをチャートに送信し、イベントのリストに書き込んだ直後に、ライブラリ自身がそれを呼び出します。
そうです。私が見落として、最後に1行も書いていなかっただけです。
ええ、ただ最後の一行を見逃していました。
TRADE_EVENT_NO_EVENTと同じにすればいい。
これは機能しない。ティック ごとに表示されます。注文は5ティック目に有効化され、ログに "1 "と4回表示され、その後すべてのティックに "20 "と表示されます。
うまくいかない。ティック ごとに表示されます。注文は5ティック目に有効化され、ログに "1 "と4回表示され、その後各ティックに "20 "と表示されます。
あなたが何をしたのか見る必要がある。テストアドバイザーではうまくいっています。
まだ何も書いていない。前の記事のコードの上はこれだけです。
OP_SELLLIMITとOP_SELLSTOPの2つの注文を出す。まだ何も作っていない。前のメッセージのコードの上はこれだけです。
そしてコードの下には、OP_SELLLIMITとOP_SELLSTOPの2つの注文があります。コード全体を見たいんだ。プライベート・メッセージに書くか、7つの封印に隠された秘密でなければここに書いてくれ。
そこにはまだ何もない。
まだ何もない
答えを得るためには、あなたのコードを実行しなければならない。すぐに行く。
あなたが家にいないことは知っているし、急かすつもりもない。
あなたが家にいないことは知っているし、急かしているわけでもない。