例:文字列
bool neutral = OrderClosePrice() == OrderOpenPrice();
というように、アルゴリズム条件の運用を形成していく必要がありそうです。
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
といった具合に、他の2つの条件も同じようなものです。
ところで、歴史上の最後の取引が、必ずしも時間上の最後の取引とは限らない。
例えるなら
というような、アルゴリズム的な条件の仕事を形成すべきなのかもしれません。
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
といった具合に、他の2つの条件も同じようなものです。
、それでも必ず確認して書き直します。結果はまたお知らせします。
マッピングされたものから行くとか。
とりあえずこの関数から統計の収集を外し、一般的なマイナスと統計は別の関数(別の関数が生成する)にする
ブロック単位で書く
統計情報を収集し、マイナスとプラスを計算する(マイナスとプラスはグローバル変数です)
if(OrderSelect((OrdersHistoryTotal() - 1), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { if(OrderTicket() != Tiket2) { bool profit1 = false; if(OrderClosePrice() > 0) { profit1 = true; } bool loss1 = false; if(OrderClosePrice() < 0) { loss1 = true; } SumPosOrder = OrderLots(); Tiket2 = OrderTicket(); Print(OrderCloseTime()); if(loss1) { ObchMin = ObchMin + SumPosOrder; Minus++; Sdelok++; } if(profit1) { ObchPlus = ObchPlus + (SumPosOrder * 0.8); } if(profit1 && ObchPlus < ObchMin) { Pobeda++; Sdelok++; } if(profit1 && ObchPlus > ObchMin) { ObchPlus = 0; ObchMin = 0; Pobeda++; Sdelok++; } }
ブロック2 - レートの計算(というより選択)のための変数nの選択
int GetN() { int n = 0; for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true; } if(loss) { n++; } if(n >= MartinSteps) { n = 0; break; } if(profit && ObchPlus < ObchMin) { n++; } if(profit && ObchPlus > ObchMin) { n = 0; break; } } Print(n); return n; } double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; } //+------------------------------------------------------------------+
これはおそらく正しいでしょう...。
買い注文は、終値が始値より高ければ利益となります。
は、買いプラスの条件です(手数料、スワップは除く)。
逆であればマイナス私はバイナリーオプションのために書いているので、少し違ったやり方をしています。
if(OrderProfit() > 0)
これはおそらく正しいでしょう?
マッピングされたものから行くとか。
とりあえずこの関数から統計の収集を削除し、合計のマイナスと統計は別の(これから作る別の)関数で行うことにします
ブロック単位での書き込み
累積マイナス・プラス(マイナス・プラスはグローバル変数)
ブロック2 - レートの計算(というより選択)のための変数nの選択
これはおそらく正しいでしょう...。
邪魔をしたくないので、皆さんのコードやTipsに目を通してもいないのですが...。
double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; }
が目に留まりました。これに関連して質問ですが、switchオペレータを使う方が簡単で可読性が高いのでは?
double SelectVolume(int n) { double Volume = 0.0; switch(n) { case 1 : Volume = Volume2; break; case 2 : Volume = Volume3; break; case 3 : Volume = Volume4; break; case 4 : Volume = Volume5; break; case 5 : Volume = Volume6; break; case 6 : Volume = Volume7; break; case 7 : Volume = Volume8; break; case 8 : Volume = Volume9; break; case 9 : Volume = Volume10; break; default : Volume = Volume1; break; } return(Volume); }読みやすく、わかりやすくなったと思います。おそらく、動作も少し速くなるのではないでしょうか。
アルゴリズム全体のアドバイスは既にされていますし、私は口出ししたくありませんし、あなたのコードも見ていませんし、同じアドバイスでも・・・しかし、この
が目に留まりました。これに関連して質問ですが、switchオペレータを使う方が簡単で可読性が高いのでは?
読みやすく、わかりやすくなったと思います。おそらく、動作も少し速くなるのではないでしょうか。元々、見つけた方法でやったらうまくいったので、改良しようとは思わなかったんです。
よく言うじゃないですか、「効いてる」「触るな」って。
でも、これからは必ずこの方法を適用してみようと思います。なぜなら、学び、成長するために必要なことだからです。
でも、今は私の変数nだけを扱うことにします。
常にn = 0(これまで)である。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
コードの書き方
タスクは本来、
最後のクローズド・オーダーを検索する。
プラスまたはマイナスの位置で閉じたかどうかを確認します。
取引回数を カウントする
プラスとマイナスの取引回数をカウントする。
ベット額を計算する。
トレードが黒字の場合(そしてトータルマイナス=0)、ベット番号1
トレードがマイナスの場合、マイナスをカウントしてベット番号2
プラスでもマイナス>0なら次のベット。
でも、なぜかベット数やベット額が正しくカウントされない...。