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

 
Nickolay72:
昨日まで、私のEAは1つずつしか注文を開かず、私が注文を出すまで次の注文は開きません。 さて、前のバーがチャンネルの上(下)で開いたときに私のEAが注文を開くようにするにはどうすればよいでしょうか?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

このコード断片を分析すると、このコードによれば、CountTrades() 関数が0を返した場合、条件 if (CountTrades()==0) CheckForOpen() が実行 され、関数CheckForOpen() が呼び出されることになります。次のティックでは、注文がオープンされていればCountTrades()関数が1を返し、else条件が成立しているはず です。

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

CountTrades()<max_tradesと表示された場合、CheckForOpen() 関数が再度実行されます。このコードでは、変数 max_tradesの値が3になっています。したがって、4つの注文を開くことになります。

EAが正しく注文を開けない場合、CheckForOpen()関数でポジションを 開く条件を定義しているロジックを確認してください。また、(CurrTime < EaStartTime || CurrTime >= EaEndTime)であれば、時間条件を確認する。私だったら、関数 if (TimeHour(TimeCurrent())) を使います。= 開始時間 && 時分(TimeCurrent())= 開始分 )です。時、分はint型またはuint型の変数に設定する。

 
Artyom Trishkin:
Open Bar Number 1 がチャンネルの上/下にある場合。
しまった、今見たらチャンネルの下限 付近でトレードしてた、注文をコピーしただけで、下を上に修正してなかった、修正版でやってみる)
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

したがって、4つの注文を開くことになります。

EAが正しく注文を開けない場合は、CheckForOpen()関数でポジションを開く 条件を指定し、ロジックを確認してください。また、(CurrTime < EaStartTime || CurrTime >= EaEndTime)であれば、時間条件を確認する。私だったら、関数 if (TimeHour(TimeCurrent())) を使います。= 開始時間 && 時分(TimeCurrent())= 開始分 )です。時、分はint型またはuint型の変数に設定する。

3つの注文を出したかったのですが、これは私の意図するところではなく、3つまでで、新しいバーごとに1つの注文を出したかったのです。

時間の問題はなく、厳密に指定された期間で動作します。

 
Nickolay72:

注文は3つまでで、新しいバーに対して1つの注文が欲しかった。 複数のバーが連続して陽性のシグナルを出すことがある。

時間の問題はなく、厳密に指定された期間で動作します。

条件:最後のポジションを開いたバーがゼロに等しくなく、オープンポジションの 数が許容される最大値より少ない場合、新しいポジションを開くことが可能です。
 

カルプトフ 2016.01.13_05:14の記事です。カルプトフさん、こんにちは。MQL4で書いた

.mq4ファイル、.ex4ファイルを取得しました。しかし、ストラテジーテスターでは動作しない。最終

は、MT4用のEAを書くことでした。MQL5では、.mq5を取得し

.ex5ファイルです。そして、.ex5ファイルは、トレードを開いた。第4弾は、以下とは異なります。

第4版は第5版と異なる部分があり、私はまだMQLのプログラマーとして優れているわけではないので、悪い結果が出たわけです。

テスターのログファイルは保存されているのですが、何が悪いのか今ひとつ理解できません。Я

翻訳してみます。とりあえず教えていただきたいのですが

プログラムコードに問題があるのか?あなたが答えている間、私は試してみます。

を理解することです。
私は、4つ目のバージョンのエディターで、次のように書くオプションがあることに驚きました。

書こうと思っていたところでした。でも、私は書いていないんです。を添付しています。

テスターのログファイルとスクリーンショットです。05:30 MSCテスターログカルプトフカルプトフ

ファイル:
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14am モスクワ時間。カルプトフさん、こんにちは。MQL4で書きました

.mq4ファイル、.ex4ファイルを入手しました。しかし、ストラテジーテスターではうまくいきません。

なぜ、コードを画像として貼り付けたのですか?))誰がそれを理解するのか?
 
Николай Никитюк:


投稿にコードを正しく挿入してください:フォーラムにコードを正しく挿入して ください
 

エラーの説明はどこで見ることができますか?

コンパイラが何を嫌がっているのか、なぜ警告が出るのか理解できません。

演算子の優先順位をチェックし、エラーが発生する可能性がある場合は、括弧を使用して優先順位を明確にします。


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

とこちら

泣いても笑っても


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

エラーの説明はどこで見ることができますか?

コンパイラが何を嫌っているのか理解できないのですが、なぜ警告が出るのでしょうか?

実は、コンパイラはエラー文の他に、エラーのあるコード行の番号と行内の位置も教えてくれるのです。
 
Karputov Vladimir:
実は、コンパイラはエラー文の他に、エラーが見つかったコード行の番号とその行の中での位置も報告しています。
これはそうです - 最初のケースでは順番に比較記号に - 明らかに "or" の間に括弧を置く必要があり、2番目のケースでは、論理式が 書かれている括弧に悪態をつきます。
理由: