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

 

こんにちは!

価格がMAを超えたらポジションをクローズ することを実装することです。

このコードでは

if(Bid<iMA(Symbol(),0,Fast_Ma_Period,Fast_Ma_Shift,Fast_Ma_Method,Fast_Ma_Price,0) && CountBuy()>0)
          
           
     {
     for(int i=OrdersTotal ()-1; i>=0; i--)
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderMagicNumber ()== MagicNumber && OrderType() == OP_BUY)
       if(!OrderClose(OrderTicket(), OrderLots(),Bid, Slippage, Black))
       Print("Ошибка");

価格がMAをクロスし、ローソク足の終値/次のローソク足の始値でポジションをクローズします。

ファイル:
 
rex1818 ポジションをクローズ するのが目標です。

このコードでは

価格がMAをクロスし、ローソク足の終値/次のローソク足の始値でポジションをクローズします。

ティックはティッククローズ上の平均MAよりもはるかにボラティリティが高いので、MAの値が現れたティック間のスプレッドは一般的なものです。価格はバラバラで、ビッドとアスクを混同しないでほしい。)

Zy, あなたは、ビッドやアスクでmaを再計算することはできませんが、スプレッドを追加し、減算すると、誤差は最小限になります。
 
Valeriy Yastremskiy #:

ティックはティッククローズ上の平均MAよりも変動が大きいので、MA値が出現するティック間のスプレッドはよくあることです。価格はバラバラで、ビッドとアスクを混同しないでほしい。ビッドによるMAと終値もビッドであり、アスクによるMAと価格もアスクである)。

Zyさん、maをbidやaskで再計算することはできませんが、spreadを足して差し引けば、誤差は最小になります。

ご回答ありがとうございます!

今日、お勧めの方法を考慮に入れて考えてみます。

 
rex1818 ポジションをクローズ するのが目標です。

このコードでは

価格がMAをクロスし、ローソク足の終値/次のローソク足の始値でポジションをクローズします。

終値によるテストは選択されていませんか?

 
Alexey Viktorov #:

バーの閉店によるテストは選択されないのですか?

こんにちは!

テストモデル:すべてのティック(....)一番正確なのは...

 
rex1818 #:

こんにちは!

テスト・モデル:すべてのダニ(....)最も正確な...

そして、Expert Advisorは、新しいバーのオープニングに基づいて書かれていないのですか?

あなたが示したコードの部分は、そのような動作の原因をより正確に想定するのに十分ではありません。

 

回答してくれたみんな、ありがとう!

エラーが見つかりました。

これですべてが正常に機能するようになりました。

 

チャートに3000バーの制限があり、2000000バーの履歴を取る必要がある場合、ウィンドウ内の最大バーのパラメータを変更することなく、履歴データを引き出すために可能なオプションはありますか?


私のシステムは、配列が200万インデックスになるとオーバーロードします。チャートをバイパスして履歴をアンロードする解決策を探さなければなりません。

   void SMA(const int aRatesTotal,const int aPrevCalc,const double  &aData[], double  &aMA[])
     {
      int Start=0;
      if(aPrevCalc==0)
        {
         for(int i=0;i<aRatesTotal;i++)
           {
            if(aData[i]!=0 && aData[i]!=EMPTY_VALUE)
              {
               Start=i+m_MAPeriod-1;
               break;
              }
           }
         aMA[Start]=0;
         for(int i=Start;i>Start-m_MAPeriod;i--)
           {
            aMA[Start]+=aData[i];
           }


しかし、その前に、この配列をフィードする。


   rt=aRatesTotal;
   prv=aPrevCalc;
   for(int i=0; i<m_max_period; i++)
     {
      ArrayResize(d[i].m,rt);
      ArrayResize(d[i].f,rt);
     }

   chsma.Solve(rt,prv,aData,d[m_max_period-1].m);
システムがクラッシュするのは、1つの配列のせいではなく、このようなサイズの配列を作り始めるからだと思われる。
 

皆さんこんにちは!

Mql4からMql5に乗り換えたいと思っています。Mql5の リファレンスマニュアルを読み始めました。残念ながら、理解はしていますが、すべてではありません。Mql4の Kovalevの教科書のように 基本から始めて Mql5の機能を詳しく 説明 し、最も重要なこととして、最も簡単で最も一般的な操作のコーディングの具体例を示して くれるような情報はどこにあるのでしょうか?つまり、私たちが必要としているのは、上級者向けではなく、基本を学び、そこから先に進む必要のある初心者向けのトレーニング情報なのです。

ご協力ありがとうございました。

 
ANDREY #:

皆さん、こんにちは!

Mql4からMql5に乗り換えたいと思っています。Mql5の リファレンスマニュアルを読み始めました。残念ながら、理解はしていますが、全てではありません。Mql4の Kovalevの教科書のように 基本から始めて Mql5の機能を詳しく 説明 し、最も重要なこととして、最も簡単で最も一般的な操作のコーディングの具体例を示して くれるような情報はどこにあるのでしょうか?つまり、私たちが必要としているのは、上級者向けではなく、基本を学び、そこから先に進む必要のある初心者向けのトレーニング情報なのです。

ご協力ありがとうございました。

コードベースには、もともとMT4で書かれ、その後MT5で書き直されたExpert AdvisorとIndicatorがあります。

多くの点で、言語は似ています。MT5で理解できるコードを書き換えるという課題を自分自身に課してください - そして、説明書やポータルの検索を積極的に利用してください - 記事も含めて、必ず答えが見つかります。