inputdouble Distance=100;
//каждый элемент массива будет содержать три поля: дата, цена и положение экстремума (верх, низ) struct sextr{datetime time; double price; int position;} Extremes[];
voidOnStart()
{
int Total=iBars(Symbol(),0);
for(int i=Total-1; i>=0; i--)
{
WriteExtremum(Extremes,Distance,Symbol(),0,i);
}
}
//здесь записываем экстремумы в массивvoid WriteExtremum(sextr &eExtremes[], double eDistance, string eSymbol, int eTimeFrame, int eShift)
{
int eFinish=ArraySize(eExtremes)-1;
double eHigh=iHigh(eSymbol,eTimeFrame,eShift);
double eLow=iLow(eSymbol,eTimeFrame,eShift);
datetime eTime=iTime(eSymbol,eTimeFrame,eShift);
//если массив пустойif(eFinish<0)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
//пока мы не знаем какой из экстремумов будет в первом элементе, поэтому берём цену по середине//можно сделать более грамотнее, но лень. Поэтому первый экстремум у нас будет бракованный
//и мы его потом затрём
eExtremes[eFinish].price=(eHigh+eLow)/2;
eExtremes[eFinish].position=0;
}
//если в массиве есть элементыelse
{
//текущий элемент - максимумif(eExtremes[eFinish].position==1)
{
//произошло обновление текущего экстремумаif(eHigh-eExtremes[eFinish].price>0)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
}
//произошло превышение расстояния между противоположными экстремумамиif(eExtremes[eFinish].price-eLow>eDistance)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
eExtremes[eFinish].position=-1;
}
}
//текущий элемент - минимумif(eExtremes[eFinish].position==-1)
{
//произошло обновление текущего экстремумаif(eExtremes[eFinish].price-eLow>0)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
}
//произошло превышение расстояния между противоположными экстремумамиif(eHigh-eExtremes[eFinish].price>eDistance)
{
ArrayResize(eExtremes,++eFinish+1);
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
eExtremes[eFinish].position=1;
}
}
//эта ситуация, когда первый элемент не закрылся, и не понятно максимум это будет или минимум//если произошло превышение в любую сторону, тогда затираем значения первого элементаif(extremes[eFinish].position==0)
{
//произошло превышение расстояния между противоположными экстремумамиif(eHigh-eExtremes[eFinish].price>eDistance)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eHigh;
eExtremes[eFinish].position=1;
}
if(eExtremes[eFinish].price-eLow>eDistance)
{
eExtremes[eFinish].time=eTime;
eExtremes[eFinish].price=eLow;
eExtremes[eFinish].position=-1;
}
}
}
}
いいかい
- もしかしたら、他のものかもしれない...
歴史上の理想的なエントリーポイント - ZigZagは、あなたが拒否している
ZigZagはアイデアを冒涜するものだから使いたくない。ZZが完璧なパーフェクトポイント指標であるならば、他のどの指標よりも正確にパーフェクトポイントを突いているのだから、最もIDEALな指標と言える。ジグザグは、すべてのトレードシグナル、すべてのストラテジーに含まれるべきだと思います。そして、これはナンセンスです。
履歴に残るトレードの領域は、時間/利益/リスクという基準で判断し、GAを使用するべきだと思います。
ZigZagはアイデアを冒涜するものだから使いたくない。ZZが完璧なパーフェクトポイント指標であるならば、他のどの指標よりも正確にパーフェクトポイントを突いているのだから、最もIDEALな指標である。ジグザグは、すべてのトレードシグナル、すべてのストラテジーに含まれるべきだと思います。そして、これはナンセンスです。
履歴上のトレードの領域は、時間/利益/リスクという基準で判断し、GAを使用するべきだと思います。
恨みっこなし
何を議論したらいいのか分からないので、とりあえず失礼します。
IT(理想点)の探索にGAをどうにか巻き込んでいく必要がある。考えているところです。
完璧な点は歴史上すでに知られており、極限であり、目で見ることができます。極値を求める ための複雑なアルゴリズムを必要としない。それを特定するための条件(例えば、隣り合う2つの極値の間にある点数を超えるなど)を特定すればよいのです。そして、それらの極値(価格、日付)の配列を作成し、同じ履歴を使用して、各極値のポイント(またはその接近)で任意の指標の値をチェックすることができます。そうだろ?
以下は、履歴の極値 検索と保存を 行うための「お遊び」コードです(性能保証なし)。
さらに、このコードはスタッド(1本のローソク足が最大値と最小値を同時に重ねた場合、および極値間の最小時間)を捕捉して処理する必要があります。
これで極値を含む配列が埋まったので、いつどこで指標を見ればいいのかがわかります。しかし、その有用性には疑問が残ります:)
ZigZagはアイデアを冒涜するものだから使いたくない。ZZが完全なパーフェクトポイント指標であるならば、他の指標よりも正確にパーフェクトポイントを突いているため、最もIDEALな指標と 言えるでしょう。ジグザグは、すべてのトレードシグナル、すべてのストラテジーに含まれるべきだと思います。そして、これはナンセンスです。
履歴に残るトレードの領域は、時間/利益/リスクという基準で判断し、GAを使用するべきだと思います。
Zig-ZagインジケーターのBITを理解していない...。
ZZインジケータは確かにIDEALインジケータですが、あくまで他のインジケータの 設定として...です。
Zig-Zagインジケーターのポイントを理解していない...。
ZZインジケータは確かにIDEALインジケータですが、あくまで他のインジケータの セットアップとして...です。
理想的な点は歴史上すでに知られており、それは極限であり、目で見ることができるのです。極値を求めるための複雑なアルゴリズムを必要としない。それを特定するための条件(例えば、隣り合う2つの極値の間にある点数を超えるなど)を特定すればよいのである。そして、それらの極値(価格、日付)の配列を作成し、同じ履歴を使用して、各極値のポイント(またはその接近)で任意の指標の値をチェックすることができます。そうだろ?
以下は、履歴の極値を 検索して保存 するコードの砕いた例です(性能は保証しません)。
さらに、このコードはスパイク(一つのローソク足が最大値と最小値を同時にカバーした場合、および極値間の最小時間)を捕捉して処理する必要があります。
これで極値を含む配列が埋まったので、いつどこで指標を見ればいいのかがわかります。しかし、その有用性には疑問が残ります:)
Peterさん、チャートに手描きのトレードの例をいくつか描いていただけますか?エントリー、エグジットできれば、いろいろな値動きのあるチャートの断片をとっておくとよいでしょう。そして、これらのポイントでその理由を説明する。案件の時間・利益・リスクの比率は?
なぜなら、あなたの考える理想的なポイントがよくわからないからです。
Peterさん、チャートに手描きのトレードの例をいくつか描いていただけますか?エントリー、エグジットできれば、いろいろな値動きのあるチャートの断片をとっておくとよいでしょう。そして、これらのポイントでその理由を説明する。案件の時間・利益・リスクの比率は?
なぜなら、あなたの考える理想的なポイントがよくわからないからです。
問題ありません。
ジグザグに八つ当たりしているのも、納得がいく。Zig-Zagは、トレンドについて何も知らない。トレンドもフラットも時計仕掛けのように刻んでいるだけだ。 彼の波(膝)はトレンドの波ではありません。トレンドの波は、次のルールに従って作られる:新しいピークを征服した場合、トレンドは継続中とみなされる。つまり、次のトレンドの波は必ず前の波をオーバーシュートし、そうでない場合は波ではないのです。