Эта статья предназначена для начинающих, для тех, кто хочет научиться написанию простых советников на новом языке MQL5. Сначала мы определимся с тем, что требуется от нашего советника, а затем приступим к написанию того, каким образом он будет это делать. 1. Торговая стратегия Он будет следить за некоторыми индикаторами и при определенном...
//находит дату точки (координату X) на прямой, на заданную цену (координата Y)datetime GetPointTimeOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, double ePrice3, string eSymbol, int eTimeFrame)
{
if(ePrice2-ePrice1==0) return(0.0);
//индекс бара соответствующий заданному времени, возможно задавать будующее времяint eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
int eIndex3=eIndex1+(int)((eIndex2-eIndex1)*(ePrice3-ePrice1)/(ePrice2-ePrice1));
return(iTime(eSymbol,eTimeFrame,eIndex3));
}
//находит цену точки (координату Y) на прямой, на заданное время (координата X)double GetPointPriceOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, datetime eTime3, string eSymbol, int eTimeFrame)
{
//индекс бара соответствующий заданному времени, возможно задавать будующее времяint eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
if(eIndex2-eIndex1==0) return(0.0);
int eIndex3=(eTime3>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime3)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime3);
return(ePrice1+(ePrice2-ePrice1)*(eIndex3-eIndex1)/(eIndex2-eIndex1));
}
//--- есть ли открытые позиции?bool Buy_opened=false; // переменные, в которых будет храниться информация bool Sell_opened=false; // о наличии соответствующих открытых позицийif(PositionSelect(_Symbol)==true) // есть открытая позиция
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //это длинная позицияreturn;
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // это короткая позицияreturn;
}
}
こんにちは。
初心者なので、あまり叱らないでください(笑)。
https://www.mql5.com/ru/articles/100
この記事では、買いシグナルがあり、かつ未決済のロングポジション がない場合にのみ買い注文を 出すべきEAの例を示します。 同様に、売りの場合 - 売り条件と未決済のショートポジションがない 場合にも、です。
最初のテストでは、1つのポジションだけでなく、複数のポジションが開いていることにすぐに気づきました。問題は、その理由です。
Expert Advisor のコードを読んで、原因を理解し見つけようとしましたが、すべて問題ないようです。
こんにちは。
初心者なので、あまり叱らないでください(笑)。
https://www.mql5.com/ru/articles/100この記事では、買いシグナルがあり、かつ未決済のロングポジション がない場合にのみ買い注文を 出すべきEAの例を示します。 同様に、売りの場合 - 売り条件と未決済のショートポジションがない 場合にも、です。
最初のテストでは、1つのポジションだけでなく、複数のポジションが開いていることにすぐに気づきました。問題は、その理由です。
Expert Advisorのコードを読んで理解し、原因を探ろうとしました。
変えてみる
if(Buy_opened)
宛がう
セルも同様
置き換えてみてください
まで
同様に販売中
役に立ちません。ドキュメントをもっとよく読む。
"未来へのトレンドラインを描け"
ある直線上の2点から、その直線上の任意の3点目の将来の価格も求めることができる(逆もまたしかり)。
こんにちは。
チェシャ子」にご注目ください。
テスターではEAが注文を開けないので、コードのエラーを指摘する必要があります。
コンパイラはエラーも警告も表示しないし、同じジャーナルでもエラーは出ないし...。
こんにちは。
初心者なので、あまり叱らないでください(笑)。
https://www.mql5.com/ru/articles/100
この記事では、買いシグナルがあり、かつ未決済のロングポジション がない場合にのみ買い注文を 出すべきEAの例を示します。 同様に、売りの場合 - 売り条件と未決済のショートポジションがない 場合にも、です。
最初のテストでは、1つのポジションだけでなく、複数のポジションが開いていることにすぐに気づきました。問題は、その理由です。
Expert Advisor のコードを読んで理解し、原因を見つけようとしました。
助けようとしたことがある。私自身は初心者です。さて、ご質問の件ですが。ポジションをオープンするためのチェックを行い、チェックを 止め忘れたために、複数のポジションがオープンしてしまう。演算子returnは、呼び出したプログラムに制御を戻します(MQL5 Referenceより引用)。
Expert Advisorのコードにreturnを 追加する必要があります(黄色でハイライトされています)。
また、コンパイラが警告を出さないように、買いポジションと売りポジションの開始条件に、OrderSend(mrequest,mresult) をチェックする条件をもう一つ追加する必要があります。この条件はif 演算子で定義され、次のようになります。
もうひとつ、考慮すべきことがあります。23:59:59に取引日をまたぐと、開いたポジションが閉じられ、00:00:00に新しいポジションが開かれることがあります。これはいわゆるロールオーバー・クローズとロールオーバー・オープンと呼ばれるもので、特定のFX業者とその取引条件によって異なります。フォーラムを検索してください、どこかに情報がありますよ。
ウラジミールさん、ありがとうございます。
こんにちは。人々はあなたの助けを必要としています。パラメータの異なる2つのジグザグを1つのインジケータに接続しました(エラーや警告はありません)。問題は、2番目のジグザグが正しく描画されないことです。
これがコード自体です(MQL5)
皆さん、こんにちは。人々はあなたの助けを必要としています。2つのジグザグを異なるパラメータで1つのインジケータに結合しました(エラーや警告はありません)問題は、2つのジグザグが正しく描画されないことです。
以下は、コードそのものです(MQL5)。
すべて正常に動作します - トップの数桁を修正するだけです
すべてうまくいっています。ただ、一番上の数字を直してください。
ありがとうございました。もうひとつ、一方のジグザグは通常通り(最大、最小)形成されるのに、もう一方のジグザグは最大時のみ形成されるのはなぜでしょうか。