//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.09.2008 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника)://| int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.//| int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
質問を重複してしまいますが、おそらく誰もフォローのために気づいていないのでしょう。
ATR インジケータの仕組みを理解すると同時に、そのコードを勉強することにしました。エッセンスは理解できたが、妙な書き方をしている。
そのスタート 機能を紹介します。
ここで、最初のブロックを混乱させた。
counted_barsの値が<1であれば、何かする 意味はあるのでしょうか?私見ですが、これはインジケータがバーをカウントしていないことを意味し、まだ値がないので関数を終了すればよいのでは...と思います。キャッチは何ですか?
なぜAtrBufferは[Bars-i] というインデックスを持っているのですか?値がない場合はバッファを0.0にする、ということだと理解しました。しかし、値0.0は(Bars) から(AtrPeriod)までのバーに対してのみ定義されており、AtrPeriodから0番目のバーまでは 何もバッファに書き込まれないことが判明しました。なぜ?
このコードのロジックは理解できません。
次のブロックでは
行列の中に。
i==Bars-1 の場合、条件。左のチャートの先頭から1本目のバーの値が 考慮されているように 見えますが・・・。しかし、これは非常に遠い、この値は何の役に立つのか?
小節は右から左へ(0から最後の(Bars)マイナス1まで)カウントされます。それぞれの新しいバー(0)ですべてのバーが対応して1つずつ増加し、最後の1つ(左側)は、数値の用語で指定されることはありませんし、この変数バーズ、誰もあなたが持っているか履歴を知っているので、それはそれが持っているすべての履歴に指標の動作を保証するものである。論理を鍛えよう!論理なしでは何も理解できない
私は1pip-1centを持っています。つまり、200pipsのダウンサイドストップに耐えるためには20USDが必要ということでしょうか?
小節は右から左へ(0から最後の(Bars)マイナス1まで)カウントされます。新しいバー(0)ごとにすべてのバーが対応して1つずつ増加し、最後の1つ(左)は数値で指定されることはなく、この変数Bars、誰もあなたが持っている歴史を知らないので、それはそれが持っている全体の歴史上で指標の動作を保証します。論理を鍛えよう!論理なしでは何も理解できない
バーは右から左へ数えるものだと知っています。チャート上に5000本のバーがあり、ATR期間=14とすると、[Bars-i] は (5000 - 1)から(5000 - 14)、すなわち4999から 4986までの 値を取ります。
したがって、AtrBufferのインデックスiは 4999から 4986に なります。そして、0から 4986までの 残りのバーはどこにあるのでしょうか?
バーは右から左へ数えるものだと知っています。チャート上に5000本のバーがあり、ATR期間=14とすると、[Bars-i] は (5000 - 1)から(5000 - 14)、すなわち4999から 4986までの 値を取ります。
したがって、AtrBufferのインデックスiは 4999から 4986に なります。そして、0から 4986までの 他のバーはどこにあるのでしょうか?
どのように計算するのですか?ATR期間=14とすると、ゼロバーはゼロバー以前の14バーの平均を与え、さらにヒストリーの深さへと続く。
iは 、時間的には最後に14本のバーを越えるが、数的には最初に平均化するか、計算式でどうするかだ。また、4986 小節目の値は、時間的に14小節前、つまり左側に立っている人たちによってカウントされます。
Docとチュートリアルでfor演算 子を勉強しましょう!
どのように計算するのですか?ATR期間=14とすると、ゼロバーはゼロバー以前の14バーの平均を与え、さらにヒストリーの深さへと続く。
iは 、前回14バーを超えるが、それらを平均化するために番号によって最初の上に行くか、または式によって何をすべきか。また、4986 小節目の値は、時間的に最後の14小節、つまり左側に立っているものによってカウントされます。
Docとチュートリアルのfor演算子を勉強しよう!
ビクター、あなたの思い込みは非論理的です。
もし、インジケータが1本もバーを処理していない場合は、すべてのバーを処理する必要があり、プログラムを終了させないことを意味します。
そして、履歴上の指標値は、履歴を分析するために必要です:)
プロフェッショナルの皆様、5分足テストでのEAの4スプレッドは全ティック-やはりダメでしょうか、それとも多かれ少なかれ?
情報が少ないし、プロは寝ている:)
0.01ロット=1セントとすると、0.1ロットのポジションで200ピップのストップロス=20米ドルの場合です。
この機能を逆手に取ることができるよう、ご協力をお願いします。
つまり、オープンオーダーからLevelProfit(LevelLossと呼んでもよい)の数だけ損切りになった場合、LevelWLossパラメータに入れた内容に応じて、TakeProfitをゼロにしたり、1pip2など損切りにしたりして、もし価格が反転しても利益が出ないようにしなければならないのである。それとも、用意したものがあるのでしょうか?
よろしくお願いします))