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

 

EAの最適化について、どのように進めたらよいか教えてください。

インジケーターの設定を担うパラメーターは数多くありますが、まさにこのインジケーターの有効/無効を切り替えるパラメーターがあります。


インジケーターの設定が無効になっていると、最適化する意味が全くありません。

質問:このような意味のないオーバーシュートをカットするにはどうしたらいいのでしょうか?

 
ANDREY:

私のために、助けと新しい情報をありがとうございます。でも、ふと思いついて、もっとシンプルな方法を思いついたんです......。
1. 分足のローソク足で最初の注文を出すときに、この最初の注文を出したときのそのローソク足のLOWをX変数に格納しています。
2.ゼロのローソク足が開いたとき(注文が開いたローソク足の次のローソク足)、LoY[1]
. 次に、ロジックを回して結論づけると
1. X =LoY[1] なら、注文は開いたローソク足の LoY より後に開かれた。
2.注文は開いたローソク足が、そのローソク足の LoY より後に開かれた。LoY[1]< X ならば、注文を出した後にもう 一回価格が下がってXより低くなったことを意味します。与えられたローソク足で LoY[] が形成される前に注文が出されたことになります
Time LOW 私は、いつ注文を出したかだけを知りたかったのですが .
そして、1分足のローソク足の注文はすべて、2pipsの差で一方が他方より上に開く。つまり、最初の1本が開くと、このローソク足上の他の本も開いたのです。
ありがとうございました。

でも、もうひとつ質問があります。
1分足のローソク足でXの値段で注文を出した。同じローソク足で数秒後、X+2pipsの価格で別の注文が発注されました。2点XとX+2の間には、価格の安値が存在する。
ローを調べたい。異なるローソク足を扱う場合、iLowとiLowest
関数を使いますが、これらの関数はインターバル・バウンドとしてバーを指定しなければなりません。しかし、私のインターバル境界はバーではなく、バーが1つしかないためXとX+2の 価格です。
必要最小限のものを探す方法は知っている。でも、そのためには、ティックごとに価格値を追う必要があるんです。また、X+2の 時点で周期的に行う方法、 iLowやiLowestの ようにX+2の時点で一気に 行う方法も知っています。
ご教授いただければ幸いです。
感謝

刻み目をファイルに書き出す
 
MakarFX:
刻み目をファイルに書き出す

私にとって新しい情報をありがとうございました。ファイルにテロップを書き込んだことはありません。その方法を理解するために、どこで詳細を読むことができますか?

?もう一つ質問なのですが......ティックと価格を配列に書いて、ティックで配列をソートして、価格の最小値を持つティックを取得することは可能でしょうか?あるいは、その助けを借りて

配列の最小値


ありがとうございました。

 
ANDREY:

私にとって新しい情報をありがとうございました。ファイルにテロップを書き込んだことはありません。その方法を理解するために、どこで詳細を読むことができますか?

?もう一つ質問なのですが......ティックと価格を配列に書いて、ティックで配列をソートして、価格の最小値を持つティックを取得することは可能でしょうか?あるいは、その助けを借りて

配列の最小値


ありがとうございました。

ファイルへの書き込み FileWriteString

一般的に、何が必要なのかがわかりにくい。

 
MakarFX:

ファイルライトストリング

何を求めているのか、わかりにくいですね。

1分足のローソク足でXの値段で注文が出された。数秒後、同じローソク足で別の注文が X+2 で発注されました。XとX+2の間には、価格の安値がある。
ローを調べたい。異 なるローソク足を扱う場合、私はiLow関数とiLowest関数
、これらの関数はインターバル境界としてバーを指定しなければなりません。しかし、私のインターバル境界はバーではなく、バーが1つしかないためXと X+2の価格です。
必要最小限のものを探す方法は知っている。でも、そのためには、ティックごとに価格値を追う必要があるんです。また、X+2の 時点で周期的に行う方法 iLowやiLowestの ようにX+2の時点で 一気に行う方法も知っています。
ご教授いただければ幸いです。
感謝
 
ANDREY:

私にとって新しい情報をありがとうございました。ファイルにテロップを書き込んだことはありません。その方法を理解するために、どこで詳細を読むことができますか?

?もう一つ質問なのですが......ティックと価格を配列に書いて、ティックで配列をソートして、価格の最小値を持つティックを取得することは可能でしょうか?あるいは、その助けを借りて

配列の最小値


ありがとうございました。

可能です。関数で.bin ファイルに書き込むだけです。

uint  FileWriteArray( 
   int          file_handle,         // handle файла 
   const void&  array[],             // массив 
   int          start=0,             // начальный индекс в массиве 
   int          count=WHOLE_ARRAY    // количество элементов 
   );

と読みます。

uint  FileReadArray( 
   int    file_handle,               // handle файла 
   void&  array[],                   // массив для записи 
   int    start=0,                   // стартовая позиция для записи в массив 
   int    count=WHOLE_ARRAY          // сколько читать 
   );
 
Alexey Viktorov:

できます。.binファイルへの書き込みは、関数

と読みます。

新しい情報をありがとうございました.とか、新しいだけでなく・・・。oooooo new ?:=) 自分でも勉強してみます...。

 
ANDREY:

私にとっての新しい情報をありがとうございました.とか、新しいだけでなく・・・。非常に新しい?:=)自分で消化してみます...。

ここで何が新しいのか?ドキュメントを開き、タイトルを読むと、「ファイル操作」のセクションがあり、 FileWriteArray() を含む様々な関数の説明があることがわかります。

ドキュメントをもっとよく読むようにと注意したのは、今に始まったことではありません。たとえ今は必要なくても。セクションの見出しを読むことで、ドキュメントに記載されている内容を理解することができます。一番必要なのはあなたなのです。

 
Alexey Viktorov:

ここで何が新しいのか?ドキュメントを開き、ヘッダーを読んで、「ファイル操作」のセクションを見つけ、 FileWriteArray() を含む様々な関数が説明されている。

ドキュメントをもっとよく読むようにと注意したのは、今に始まったことではありません。たとえ、今、必要なものがなくても。セクションの見出しを読むことで、ドキュメントに記載されている内容を理解することができます。必要なのはあなたです。

貴重なアドバイスをありがとうございました。今のところ、ドキュメントを読むのは、コードを書いていて、答えのわからない問題に直面したときだけです。今までのコードを書いていて、ファイルにデータを書き込む必要性に遭遇したことがなかったので、全く新しいテーマです。
私のアイデアを、ファイルに書き出す ことなく、もっと簡単な方法で実現できないものでしょうか?私のコードのようにこれは動作するコードではありませんが、1分足のローソク足で開いた2つの隣接する注文の間の最小値を見つける方法についての私のアイデアを説明するものです
助けてくれてありがとう。

double P[60],Z;
int Tick,x,x1,G,G1,G2,T;

void OnTick()
{
Tick++;

if (OrdersTotal()==1&&Tick<2189)
{
P[x]=Bid;
Print("------------------------P[x]=Bid------------------------=", DoubleToString(P[x],5), "  x ",  x);
x++;
}
if (OrdersTotal()==2&&Tick==2189)
{
x1=x;
x=0;
ArraySort(P,WHOLE_ARRAY,0,MODE_ASCEND);
T=(60-x1);
Print("------------------------МИНИМУМ=------------------------=",DoubleToString(P[T],5), "  Tick ",  Tick, "  x1 ",  x);
}

if (Tick==2176||Tick==2188)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
G2=G;
G=Tick;
}
}

つまり、各ティックの価格をファイルではなく、直接配列に書き込んでいるのです。

 
ANDREY:

私のために、助けと新しい情報をありがとうございます。でも、ふと思いついて、もっとシンプルな方法を思いついたんです......。
1. 分足のローソク足で最初の注文を出すときに、この最初の注文を出したときのそのローソク足のLOWをX変数に格納しています。
2.ゼロのローソク足が開いたとき(注文が開いたローソク足の次のローソク足)、LoY[1]
. 次に、ロジックを回して結論づけると
1. X =LoY[1] なら、注文は開いたローソク足の LoY より後に開かれた。
2.注文は開いたローソク足が、そのローソク足の LoY より後に開かれた。LoY[1]<Xの場合、注文を出した後にもう 一回価格が下がり、Xより低くなったことを意味します。それは、与えられたローソク足でLoY[] が形成される前に注文が出されたことを意味します。

時間を確認しても、新しい注文を待っている間に、最大または最小のティックを要求することができます。