初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 748

 
RogozaIV:
最近、mql4からmql5に移行したのですが、RTS指数のExpert Advisorをテストしているところ、ポジションを開く条件の1つがif(...OrdersTotal()==0)ですが、複数のポジションを開くのに問題があります。なぜこの条件ではうまくいかないのか?ポジションを1つしか開けない場合はどうすればよいですか?

受注高

OrdersTotal有効な注文の数を 返します。

役職名合計

PositionTotal開いているポジション の数を返します。


備考

ツールボックス」パネルの「取引」タブにも表示される、有効な未決済注文と ポジションを混同しないようにしましょう。注文は取引を 実行するための命令であり、ポジションは1つまたは複数の取引の 結果である。

ポジションの「ネッティング」(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGとACCOUNT_MARGIN_MODE_EXCHANGE)では、いつでも各シンボルに対して 1つのポジションしか 開くことができず、それは一つまたは複数の取引の 結果となっています。ツールボックス」パネルの「取引」タブにも表示されるポジションと有効な未決済注文は、混同しないように注意してください。

ポジションが独立して表示される場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)、各シンボルに対して複数のポジションを同時にオープンすることができます。


つまり、OrdersTotalを使って、今現在のRETAILED ORDERが何 件あるかを確認するのです。

オーダータイプ購入限度額

買い指値注文の保留

注文型販売限度額

売り指値注文の保留

注文タイプ_購入停止

買い注文の保留 ストップ注文の保留

注文タイプ_販売停止

売り注文の保留 売り注文の停止

注文タイプ_購入停止_制限

注文価格に到達すると、StopLimit価格で買い指値注文が発注されます。

注文タイプ_販売停止_リミット

注文価格に到達すると、StopLimit価格で売り指値注文が発注されます。


で、その時点でいくつのオープンポジションがあるのかを確認する必要があります。

ポジションタイプ

購入

ポジションタイプ売り

販売する


- PositionsTotal を使用する必要があります。

 

Vladimir Karputov ありがとうございます。

 
Agat:
こんにちは。MT5のビルド1604への最新アップデート後、私のインジケータが正しく動作しなくなりました。を使用しています。
いわゆる「液体」の指標。例えば、複数の期間のストキャスティクスを一つのウィンドウに並べています。さて、今度は短いものが描かれています
従来通り、少し長いものは数本しか描画されず、長いものは全く描画されない。

急に歴史を欠くようになった印象があります。何が問題なのか、教えてください。
下位の時間枠が開かれていないMTで不具合が発生したことが判明しました。M1以上からチャートを開いていたが、すべて問題なかった。この問題は解決されました。
 
ああ、興奮するのが早かったな、ターミナルを再起動しても同じだ、毎回すべてのチャートをクリックしなければならない。
それじゃダメだ、仕事にならない。せめて誰か一言、この問題の是非を語ってくれないものか。明らかにアップデートに不具合がある。

そんな疑問を持った人はどこに行けばいいのでしょうか?
 
こんにちは!2017.06.02_17:45 GMT+3です。質問があります。.mq5プログラムはロット計算を書き、その結果、 --ストラテジーテスターの プログラムは法外に大きなロットで取引を開始しようとします。アットリスク率1.09。 預金額は預金額より大きい(デフォルトでは1万ドル)。Include>Expert>Money>MoneyFixedRisk.mqh フォルダにある標準の OOP ファイルを使おうとしました。結果:プログラムは、ゼロロットで取引を開始しようとします。(0.00).これは企業のプログラマーが使う手口だと思うんです。それとも、何か見落としているのでしょうか?じゃあ、EAを使い物にならなくしてくれ。ロットを横に曲げる。エキスパートアドバイザーが、計算されたロットで、指定されたリスクの割合で取引を開始するように、私は何を書くべきかを知っているかもしれません?自分ではできない、時間を無駄にしている。我が社のプログラマーに悪気はないのだろう。同梱のファイルLot.mqhを添付します。誰かが答えてくれることを期待します。18:00 GMT+3。GMT+3 18:11に挿入されました。
ファイル:
Lot.mqh  2 kb
 
Agat:
こんにちは。MT5のビルド1604への最新アップデート後、私のインジケータが正しく動作しなくなりました。を使用しています。
いわゆる「液体」の指標。例えば、複数の期間のストキャスティクスを一つのウィンドウに並べています。さて、今度は短いものが描かれています
従来通り、少し長いものは数本しか描画されず、長いものは全く描画されない。

急に歴史を欠くようになった印象があります。何が問題なのか、教えてください。


別の時代の歴史にアクセスするにはどうすればいいのでしょうか?アクセスするために、どのようなチェックをしているのですか?どのようなエラーコードが 表示されますか?

 
Николай Никитюк:
こんにちは!2017.06.02_17:45GMT+3です。質問があります。.mq5プログラムはロット計算を書き、その結果、 --ストラテジーテスターの プログラムは法外に大きなロットで取引を開始しようとします。アットリスク率1.09。 預金額は預金額より大きい(デフォルトでは1万ドル)。Include>Expert>Money>MoneyFixedRisk.mqh フォルダにある標準の OOP ファイルを使おうとしました。結果:プログラムは、ゼロロットで取引を開始しようとします。(0.00).これは企業のプログラマーが使う手口だと思うんです。それとも、何か見落としているのでしょうか?じゃあ、EAを使い物にならなくしてくれ。ロットを横に曲げる。エキスパートアドバイザーが、計算されたロットで、指定されたリスクの割合で取引を開始するように、私は何を書くべきかを知っているかもしれません?自分ではできない、時間を無駄にしている。我が社のプログラマーに悪気はないのだろう。同梱のファイルLot.mqhを添付します。誰かが答えてくれることを期待します。18:00 GMT+3。GMT+3 18:11に挿入されました。

このEAを実行する:Money Fixed Risk- 両方の入力パラメータを変更し、ターミナルの「Experts」タブで印刷を確認します。
 

インジケーターのデータが取得できないのですが。

int OnInit()
  {  
   handle1=iMA(NULL,0,per1,0,MODE_LWMA,PRICE_CLOSE);
   handle2=iMA(NULL,0,PLength1,0,MODE_LWMA,PRICE_CLOSE);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
   if(copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle1)>0)
            break;
         Sleep(50);
        }
      copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
      if(copied1<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }  
   int copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
   if(copied2<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle2)>0)
            break;
         Sleep(50);
        }
      copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
      if(copied2<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }
  }

何もコピーしていない。コピーされた変数1/2は常に0より小さい。デバッガでは、このコードより先に進めないのです。どうやったら正しくできるのか、もう頭が壊れそうです。

 
うーん、以前は4806のエラーが出たのに、ハンドル 作成をOnInit()に移したら4807になったよ。どうやるんですか?
 
わかったような気がします。ハンドルは作成されませんでした。全データを初期化していない。
理由: