MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 52

 
trader781:

ストップ/ストップが200の場合の対処法

けど

tp=NormalizeDouble((価格+(TakeProfit*_Point)),Digits)となります。

ドル円の場合、為替レート117.000で317.000円になります

期待値 117.200

Point()==0.001 (USDJPYの場合)なら、200*0.001で0.2。

ここで、117.0に0.2を足すと117.2になります。

どこが「不公平」なのか?

 
Artyom Trishkin:

Point()==0.001 (USDJPYの場合)なら、200*0.001で0.2。

ここで、117.0に0.2を足すと117.2になります。

そして、「不公平感」はどこにあるのでしょうか。

117+(200*_Point)で117.200になると予想されます。

通常、EURUSDでテストされます。

Vitalyが上で説明しました、ありがとうございます。

見つけたような気がします。

中間的なアルゴリズムとしては十分だと思いますので、あとはこの瞬間を何らかの形でフィルタリングする必要があります。

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

117+(200*_Point)で117.200と出力される見込みです。

...

まあ、それは彼が与えているものですが......。計算をお見せしました。あるいは、多通貨で、「非ネイティブ」シンボルからデータを取っているのでしょうか?

そして、Point()やDigits()の代わりに、SymbolInfoDouble() や(int)SymbolInfoInteger()を使用します。

 
Artyom Trishkin:

まあ、それは彼が与えているものですが......。計算をお見せしました。それとも、多通貨で、「非ネイティブ」シンボルからデータを取るのでしょうか?

Point() と Digits() の代わりにSymbolInfoDouble() と (int)SymbolInfoInteger() を使用します。

ありがとう、うまくいったよ)))

私は現在、一連の注文にトレーリングストップを挿入する方法を探しています。

115.000から117.000まで200ステップで10回注文しています。

各ロットは、前のロットよりx値だけ大きくなる

目標は、次の計算を使用して注文チェーン全体にトレーリングストップを置くことです(平均価格)+(y*_point)。

トレーリングストップを設定しているのですが、スタック全体の平均価格とロットによってどのように計算されるのかについて質問です。

 
trader781:

ありがとうございます、うまくいきました)))

現在、注文の連鎖で末尾を挿入する方法を探しています。

115.000から117.000まで200ステップで10回注文しています。

各ロットは、前のロットよりx値だけ大きくなる

目標は、次の計算を使用して注文チェーン全体にトレーリングストップを置くことです(平均価格)+(y*_point)。

トレーリングストッパー自体は持って いるのですが、問題は積み上げ全体の 平均価格にどう付けるか、ロットによってどう計算するのかです

ゼロからプログラミングを学べ、というのは普遍的なアドバイスです。そうすれば、そんな疑問を持つこともないでしょう。プログラミングは簡単なことではありません。

つまり、すべてのオーダーをループさせて、「必要なもの」だけを選んで修正しなければならないわけです。しかし、選択した順番 を入れ替えても動作する確率が非常に高いので、これには十分注意しなければなりません。

 
Alexey Viktorov:

ゼロからプログラミングを学べ」というのは、世界共通のアドバイスです。そうすれば、そのような疑問はなくなるでしょう。プログラミングは簡単ではありません。

つまり、ループ内のすべてのオーダーを確認し、「必要なもの」だけを選択して修正する必要があるのです。しかし、この質問には非常に注意が必要で、選択した順番 を入れ替えるとうまくいく確率が非常に高くなるからです。

現在、最後の1枚に取り組んでいて、残りは休止中だが、スキームが不正確なので、もっとうまくやりたい
 

皆さんこんにちは、MAをベースにしたEAを書きました。(私自身、MQL4で書き始めたのは少し前なので、まずは簡単なものから始めてみようと思いました。だから、何が悪かったのか知りたかったんです。エキスパートアドバイザーの本質は単純です:2つまたは3つのMAが交差したときに警告を与える(方法に応じて:積極的な= 2つのMAのクロスオーバー、保守= 3つのMAのクロスオーバー)...です。以上です。自分から市場に参入する。Expert Advisorでは、2つの機能を規定しました。積極的 - これは、2つの最速MAの単純なクロスオーバーで信号です。 保守的 - 2つの高速MAのクロスオーバーで、あなたはまた、最も遅いものを考慮する必要があります(つまり、トレンドの方向の信号です)。問題は、Expert Advisorが1つの警告(開始時または時間枠の変更時)しか出さず、その後のすべてのシグナルに沈黙していることです。何が問題なのか、教えていただけるとありがたいです。MQL4のルールに従って、すべてのイベントに対して関数を規定しました。もちろん、関数なしですべてをOn Tickイベントに登録することもできますが、関数を別途登録することで、関数を 簡単に呼び出せる ようにしたいですし、時間と共に新しい「フィルター」関数を追加したいのです。

コード

================================================================================================

extern bool Metod=false; // メソッドの選択:Conservative または Aggressive。

extern int Time_Frame=1;//Time frame

input bool Metod=false; /Conservative-TRUE | Aggressive-FALSE

extern inttern FastMA_Parametr=5;

extern int intMA_Parametr=8;

extern int SlowMA_Parametr=18;

extern inttern TrendMA=163;

extern bool DemarkGo=false;

extern inttern Demperiod=4;

int rez;// MAが下向きにクロスしていればrez=-1、上向きならrez=1。

//+------------------------------------------------------------------+

// MAを初期化する

double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA

double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// 平均値MA

double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); スローMA


//+------------------------------------------------------------------+

int OnInit()

{

rez=0とする。

return(INIT_SUCCEEDED);

}

//=======================================

//------------------------------------------------------------------------------

void OnDeinit(const int reason)

{



}

//=============================================

//Metod=trueの時のKonservativeシグナル用関数------------------------------+.

int Konservative()

//3本線の上方クロスオーバーを確認する

{

if (Metod==true)


{

if(FastMA>MiddiMA&&&MiddiMA>SlowMA&&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up-----"。コンサバティブ」)。

rez=1です。

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez)。

return(rez);


}


//3本の線が下向きにクロスオーバーしているか確認する

if(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)とする。

{

Alert(Symbol(),Time_Frame," ---- DOWN----.コンサバティブ」)。

rez=-1です。

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez)。

return(rez);


}

}

return(rez);

}

//=================================================

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

アグレッシブ機能

int Agressive()

// スローのない2本の線の上方交差をチェックする


{

if (Metod==false)

{

if(FastMA>MiddiMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up-----"。アグレッシブ」)。

rez=1です。

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez)。


}


//スローラインなしで2本のラインが下向きにクロスオーバーしていることを確認する

if(FastMA<MiddiMA&&rez>=0)とする。

{

Alert(Symbol(),Time_Frame," ---- DOWN----.アグレッシブ」)。

rez=-1です。

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez)。

}

}

return(rez);

}

 
Олег:


これなら、自分でもできそうだ。
ファイル:
6645.mq4  7 kb
 
trader781:
現時点ではラストオーダーで、他は休止中ですが、スキームが正確ではないので、もっと良くしてほしいです。

いいえ、100%ではありません。それとも別の話かな?

一般に、アルゴリズムは次のようになる。

すべての注文を通過させるループを設定するのです。

次の順番を選んで作業するのです。

その注文が必要かどうかを確認するのです...。そうでない場合は、次のループの繰り返し...

必要」であれば、改造に適しているかどうかを確認する。ストップロス水準との距離を比較するだけです。

距離が十分であれば、順序を変更する。


つまり、全オーダーをループする修正関数があり、その呼び出しの前に、ループも動作している場合、選択されたオーダーが 変更される...ということです。

 
Alexey Viktorov:

いいえ、100%ではありません。それとも別の話かな?

一般に、アルゴリズムは次のようになる。

すべての注文を通過させるループを設定するのです。

次の順番を選んで作業するのです。

その注文が必要かどうかを確認するのです...。そうでない場合は、次のループの繰り返し...

必要」であれば、改造に適しているかどうかを確認する。ストップロス水準との距離を比較するだけです。

十分な距離であれば、オーダーを修正する。


つまり、すべての注文をループする修正関数があり、その呼び出しの前に、ループも動作している場合、選択された注文が 変更される...ということです。

ポイントは、あるロットの負け注文が常に存在し、それも残りのロットを犠牲にして満たされなければならないことです。きっかけは、閉店時間です。一つでも欠けると、その連鎖は途絶えてしまうのです。したがって、問題は、選択されたすべてのものの平均価格をどのようにトロールするかということである。
理由: