[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 644

 
Myth63:


問題は、私はMQLプログラミングがあまり得意ではなく、私のEAはBASICの原則に基づいていることです =)。未決済注文に変数が割り当てられる。ターミナルには再ログインしたと表示され、注文を開くとこの変数の値が消えます。注文が再ログインした場合はどうすればいいのでしょうか? この場合、ターミナルはオープンポジションをチェックし、その値をロボットによって割り当てられた変数に代入する必要があります。また、Expert Advisorはテストで良好な測定値を示しています。

何を保存したいか(どのような情報か)により、異なるオプションを使用することができます。

  • の場合、注文に関する情報をそのコメントに格納し、そのコメントから読み出すことができる。
  • 必要な情報をファイルに 書き出すことができますが、その処理には時間がかかります。
  • 最もよく使われるバリエーションは、ターミナルのグローバル変数に 書き込むことです。
 
FelixFX:

差し支えなければ、こんな例もあります。私が理解する限り、ループが実行されるまでデータは更新されないのでしょうか?
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

この際、同じデータしか使われないのでしょうか?新しいティックでデータが更新されるのか、されないのか?
 
Myth63:


MQLのプログラミングが苦手なことと、私のEAはBacycaの原理に基づいていることです =)。未決済注文に変数が割り当てられる。ターミナルには再ログインしたと表示され、注文を開くとこの変数の値が消えます。オーバーログがあった場合にオープンポジションをチェックし、その値をロボットが設定した変数に代入するようにするにはどうしたらいいのでしょうかね。

マジックナンバーのことですか?情報が足りない...何が変数で、どう代入されているのか......そこから始めなければならない。

しかし、私のExpert Advisorはテストでは良い結果を示しています。

100トレードは読み物ではなく、歴史に残る良い作品だと思います。2~3年で数千件の取引は、信頼に足るものです。
 
FelixFX:

この際、同じデータしか使われないのでしょうか?新しいティックでデータが更新されるのか、されないのか?
いや、アップデートされるためには、これ でなければならないのです。ループに関する質問は、サイト内検索エンジンが何ページ目を返すか、でお答えしています。読んでみてください。
 
FelixFX:

この際、同じデータしか使われないのでしょうか?新しいティックでデータが更新されるのか、されないのか?
ループを使えば、次のティックが来るのを待たずに、関数を「ループ」して実行することができます。どのようなデータをお聞きになりたいのでしょうか?
 
手書きで書くのは簡単そうですが、コードの一部がティックで、一部がバーで実行されると、プログラムが非常に分かりにくくなります) どうもありがとうございました)
 
Qwertee:
ティックごとではなく、各バーが開くときに、自分で書いた関数を実行できるような組み込み関数があれば教えてください。 手書きで書くのは難しくないのですが、あるコードをティックごと、あるコードをバーごとに実行すると、非常に混乱します。) ありがとうございます。

ということで、新しいバーが開くタイミングを判断して、機能を実行するだけです。

新しいバーの出現は、そのバーの開始時刻を 記憶し、バー0の現在時刻と比較することで判断することができます。新しい時間が前の時間より長ければ、新しいバーができたことになります。

 

sergeev アドバイスありがとうございます、うまくいきそうです)

よし、もう1つ。

私のEAでは、このように分岐しています。

if(period=="M15")
{
//買いを開くかチェック
Alert(buysell);

if(buysell=="買う")

アラート(1)です。

}

基本的にはネストされたif。しかし、if(period=="M15")の条件は満たされ、Alertは結果を出し、買いますが、if(buyell=="buy")の条件は満たされず、Alert(1)のコマンドも開始されません。

 
sergeev:

ということで、新しいバーが開くタイミングを判断して、機能を実行するだけです。

新しいバーの出現は、そのバーの開始時刻を記憶し、バー0の現在時刻と比較することで判断することができます。新しい時間が前の時間より長ければ、新しいバーができたことになります。

書いておきます。

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }