初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 120

 
Ihor Herasko:

ええ、わかりますよ。そして、その答えがhttps://www.mql5.com/ru/forum/160587/page115#comment_6521492 の下の投稿に書いてありますね。つまり、機能が論理的なサブタスクに分割されていないことが問題なのです。注文の解析、取引行動の決定、取引の実行をひとまとめにしたものです。

このような課題は、3つの段階で正確に解決することができます。

  1. プログラムによる監視対象となる注文の情報収集。これは、すでに持っているオーダー評価のループに過ぎない。このサイクルの結果は、オーダーの配列でなければならない。
  2. 売買シグナルを算出します。計算結果は、注文を開始または終了するコマンドとなります。取引戦略によって異なります。以前は、列挙がないときは、0-シグナルなし、1-買いオープン、-1-売りオープン、2-買いクローズ、-2-売りクローズというコードを使っていました。
  3. 1回の取引操作の実行。売買シグナルがあり、それに合致する注文(ポイント1)があれば、1回の売買操作が行われる。場合によっては、OnTickを終了して次のティックに進むこともあります。

では、ありがとうございました。少なくとも、何をすればいいかは明確です。自分で「どうやるか」を考えてみる。まだアレイに慣れていないけれど。とにかくありがとうございました。

 

どうすればいいのか、教えてください。


for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

が壊れる。

警告は、'OrderSelect' の戻り値を確認する必要があります

この'OrderSelect'の値は、他にどのようにチェックすればよいのでしょうか?

j=OrderSelect(); のようにすればよいのでしょうか


 
Rewerpool:

どうすればいいのか、教えてください。


for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

が壊れる。

警告は、'OrderSelect' の戻り値を確認する必要があります

この'OrderSelect'の値は、他にどのようにチェックすればよいのでしょうか?

j=OrderSelect(); のようにすればよいのでしょうか


 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 
Alekseu Fedotov:

うまくいかなかった!(

((((

 
ファイルに書き込むと、すべてうまくいくのですが、今度は "eurusd" "1.2242" のようなデータをどのように保存すればよいのでしょうか。テンポラリーデータなど?
 
Mickey Moose:ファイルに書き出すと、すべてうまくいきますが、データをどのようにスパーリングすればよいのでしょうか。テンポラリーデータなど?

string s=FileReadString(F1); // テキストファイルの次の行を読み込む
StringSplit(s, "," ,a); // カンマで区切られた要素を配列に 分割
datetime T1=StrToTime(a[4]); // さらに、変換を進める ...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);

 
novichok2018:

では、ありがとうございました。少なくとも、何をすればいいのかが明確になりました。自分で「どうやって」を考えてみる。まだアレイには慣れていませんが。とにかく、ありがとうございました。

最低でも1ブロックは書いて見せてください。この場合、さらに教えてくれるでしょう。

 
Rewerpool:

うまくいかなかった!(


もう一度、よく読んでみてください。

 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

すべてのコードは次のようになります。

   for(int i=OrdersTotal()-1; i>=0; i--) 
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
       if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
          {
         break;
          }
        }
      }
 
Rewerpool:

うまくいかなかった!(


何もしていないんですね。上に書いてありましたね。

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

しかも、確認もせずに書いてあるんですね。その方が読みやすく見えますが。

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   ....
}
 

Ihor Herasko @Alekseu Fedotov

ありがとうございます!そういうことだったのか!?