記事"MQL5でのトレードオペレーション - 簡単です"についてのディスカッション - ページ 3

 

MQL4からm_Trade.PositionModify(m_TradeはCTradeクラスの メンバです)を使ってこの構造を実装することが可能かどうか教えてください。

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

スクリプトのポイントは、指定されたロット数で市場に買いを建て、10分割で利食いを設定することです。ストップ・ロスを設定しないと、PositionModifyがエラー10016(リクエストのストップが正しくない)を 出すので困っています。また、逆指値を設定するタスクもありません。)ヘルプには、値を指定しないことも可能だと書いてあります:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

私は前の購入リクエストから得た値を渡そうとしました(もちろんゼロです)。これが私のコードです:

...
         m_Trade.Buy(Lots);// 市場で全量を購入する
         if(m_Trade.ResultRetcode()==10008)//購入に成功したら、テイクアウトを設定してポジションを変更する。
           {
            S=「申し込みは完了しました。注文番号: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// 前回のリクエストからストップロスを取得
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+=「スナップ・テイク: "+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+=「SnPosition変更エラー、コード:"+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

よろしくお願いします。

削除済み  
これは、あなたのEAプログラミングを飛躍させるための大きな助けとなる。
 

MQL5におけるオブジェクト指向プログラミングの良い入門書です。

MT5ビルド1347で、最初のコード例が "inlegal switch expression type "というエラーでコンパイルに失敗しました。

AccountInfo.mqhのswitch文にintへのキャストを追加して動作させる必要がありました:

switch((int)MarginMode())

 
Николай Осипов:

こんにちは、
RTS-3.13 (RIH3)先物を取引するコードでBuyStop関数を使用すると、エラーが発生し続けます:
10022TRADE_RETCODE_INVALID_EXPIRATION- 注文の有効期限が無効です。


ニコラス、こんにちは。この問題は解決されましたか?私もRTS-6.17で同じ問題を経験しています。
 
Rashid Zeynalov:
RTS-3.13のOpening-demoで同様の問題が発生し、あらゆることを試しました(指値注文はシンボル・プロファイルに書かれているようにORDER_TIME_SPECIFIED_DAYに設定されています)。買い指値注文は完璧に市場に手動で開いている。これはターミナルの不具合です。
ラシッド、こんにちは。この問題は解決しましたか?私はRTS-6.17のリアルオープンで同じ問題を経験しています。

 
sgtkachev:
ラシッド、こんにちは。この問題は解決されましたか?私はRTS-6.17のリアルオープンで同じ困難を経験しています。

すみません、質問に気づきませんでした。このファイルを置き換えてみて、結果を報告してください。
ファイル:
Trade.mqh  68 kb
 

こんにちは

一部のブローカー(例えばFoxPro)では、ポジションをオープンしようとするとエラー10030が発生します。コードの説明:無効なフィル。他のブローカー(例えばAlpari)では、これらの行なしで動作します。

Expert Advisorの初期化ブロックでは、コード内の異なる値を書きました:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

役に立ちません。問題を解決する方法は?それとも、このCTradeクラスは時代遅れで、最新のターミナルアップデートに 対応しておらず、構造を通じて標準スキームに従って取引操作を記述する必要があるのでしょうか?


UPD:Rashidが上記のライブラリファイルを投稿してくれました。標準ライブラリにエラーがあるのは悲しいことです。ライブラリを置き換えることなく、EAに直接変更を加えることが可能かどうかを比較検討し、すべてが機能するようにしたいと思います。

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
グッド
 
makk:

MQL5におけるオブジェクト指向プログラミングの良い入門書です。

MT5ビルド1347で、最初のコード例が "inlegal switch expression type "というエラーでコンパイルに失敗しました。

AccountInfo.mqhのswitch文にintへのキャストを追加して動作させる必要がありました:

switch((int)MarginMode())

 

こんにちは、とても参考になる投稿をありがとうございます。私はMT5初心者で、EAの作成について勉強中なので、サンプルコードをコピーしてCtrade.Buyを実行しましたが、バックテストに失敗しました。詳細は以下の通りです:


1) 口座:基本通貨をNZDとしたライブ口座です。

2) バックテスト用のMetaEditor設定:

オプション


3) コードhttps://www.mql5.com/ja/articles/481 からコピー


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) エラーログ (EUR/USD でのみテストしていることに注意してください):

GJ 0 19:36:44.410 127.0.0.1 ログイン (ビルド 1730)

HH 0 19:36:44.420 ネットワーク 38520 バイトの口座情報をロード

JO 0 19:36:44.420 ネットワーク 1482 バイトのテスターパラメータをロード

QE 0 19:36:44.420 ネットワーク 188 バイトの入力パラメータをロード

FR 0 19:36:44.421 ネットワーク 443 バイトの記号リストをロード

IF 0 19:36:44.421 テスターエキスパートファイルが追加された: Expertsdemo.ex5.46684バイトがロードされた

QH 0 19:36:44.433 テスター初期預金10000.00 NZD、レバレッジ1:100

JN 0 19:36:44.437 テスターの初期化に成功

ES 0 19:36:44.437 ネットワーク 46 Kb の初期化データを受信

PP 0 19:36:44.437 テスター Intel Core i7-4510U @ 2.00GHz、8103 MB

RJ 0 19:36:44.799 シンボル EURUSD: 同期されるシンボル

HR 0 19:36:44.800 シンボル EURUSD: シンボルが同期、3624 バイトのシンボル情報を受信

NJ 0 19:36:44.800 ヒストリー EURUSD: ヒストリーの同期開始

GO 0 19:36:44.856 History EURUSD: 27バイトのヒストリデータをロードして0:00:00.000に同期します。

RQ 0 19:36:44.856 History EURUSD: 2012.01.01から2017.11.15までの履歴が同期されました。

EF 0 19:36:44.993 History EURUSD,Daily: 履歴キャッシュが1010本分割り当てられ、2014.01.01 00:00 から 2014.12.31 00:00 までの312本が含まれています。

ND 0 19:36:44.993 History EURUSD,Daily: 履歴は2014.01.01 00:00から開始。

OL 0 19:36:44.996 Tester EURUSD,Daily (HalifaxPlus-Live): 毎ティック生成

GN 0 19:36:44.996 Tester EURUSD,Daily: Expertsdemo.ex5の2015.01.01 00:00から2017.11.15 00:00までのテスト開始

CK 0 19:36:56.288 Symbols NZDUSD: 同期されるシンボル

IS 0 19:36:56.288 Symbols NZDUSD: シンボルが同期、3624バイトのシンボル情報を受信

JL 0 19:36:56.288 ヒストリー NZDUSD: ヒストリーの同期開始

HJ 0 19:36:56.575 History NZDUSD: 14 Kbのヒストリデータをロードして0:00:00.078に同期します。

LS 0 19:36:56.575 History NZDUSD: 2013.01.01から2017.11.15までの履歴が同期されました。

CO 0 19:36:56.579 Symbols EURNZD: 同期されるシンボル

OJ 0 19:36:56.580 シンボル EURNZD: シンボルの同期が完了、3624バイトのシンボル情報を受信

DL 0 19:36:56.580 ヒストリー EURNZD: ヒストリーの同期開始

MK 0 19:36:56.656 ヒストリー EURNZD: 27バイトのヒストリーデータをロードし、0:00:00.000に同期します。

OD 0 19:36:56.656 History EURNZD: 2013.01.01から2017.11.15までの履歴が同期されました。

IN 0 19:36:56.665 トレード 2015.01.02 03:00:00 マーケット買い 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665トレード2015.01.02 03:00:00取引#2買い0.10 EURUSD at 1.20549完了(注文#2に基づく)

FH 0 19:36:56.666 トレード 2015.01.02 03:00:00 ディール実行 [#2 buy 0.10 EURUSD at 1.20549] (注文 #2 に基づく)

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 order performed buy 0.10 at 1.20549 [#2 buy 0.10 EURUSD at 1.20549].

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy()メソッドが正常に実行されました。リターンコード=10009 (1.20549で実行)

NM 2 19:37:15.823 History NZDUSD 2016.09.21 23:01:00: corrupted history detected (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111).

JF 2 19:37:15.823 History NZDUSD 2016.09.21, バッドコンテナが見つかりました。

LQ 2 19:37:16.106 テスター履歴 未定義関数でエラー9

OH 2 19:37:16.106 Tester stopped on 0% of testing interval with error '20 NZDUSD'.


何が間違っているのか、どうすれば解決できるのか教えてください。