コーディングの方法は? - ページ 118

 

CEHansenのために

こんにちは。

その中で、バーを一本ずつ取っていくところでは、Currentの代わりにi変数を随所で使う必要があります。Currentは初期化されていないので、0です。

一番わかりやすいのは、冒頭のforの中にこう書くことです。

Current = i;

矢印が表示されます。また、Sto_Lookbackの値を大きくすることを忘れないでください。100,1000とか、そんな感じです。

P.S このようにforを使うのが、私の見解ではより良いと思います。

for (int i = Sto_Lookback; i >0; i--){。

...

}

これは "バー "の通常の方法であるため、0は最後の1つである。これは、後でいくつかの他のトラブルからあなたを保存します。(例えば、再描画など)。単なる思いつきです。

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

ビクター

 
 

Klinger Volume Oscillator(クリンガー・ボリューム・オシレーター

これは面白そうなインジケータですね。

しかし、それは部分的にボリュームに依存している、それは実際には外国為替で使用できません。

ビッグベ

 

オーダーモディファイエラー 1

私のバックテストでは、時々「OrderModify error1」が発生します。つまり、OrderModify()の引数は、変更された注文の対応するパラメータと同じであることを意味します。

これは、二重比較の問題が原因かもしれません。

問題は、どのようにこの問題を解決することができるでしょうか?

以下は、私が問題を引き起こしていると考えている部分です。

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy").If(EachTickMode):シグナルを送信します。

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

を続けます。

}

//MoveOnce(ムーブワンス

if(MoveStopOnce && MoveStopWhenPrice > 0) { //MoveStopOnceの場合

if(ビッド - 注文開始価格() >= ポイント * MoveStopWhenPrice) { {

if(OrderStopLoss()未満OrderOpenPrice() + Point * MoveStopTo ) { {。

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

//トレーリングストップ

if(UseTrailingStop && TrailingStop > 0) {

if(ビッド-オーダーオープン価格() > ポイント * TrailingStop) { {

if(OrderStopLoss() < ビッド - ポイント * トレイリングストップ) { { {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen)を実行します。

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

} else {

//Close

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

//| シグナル開始(売り終了)

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

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

//| シグナル終了(売り終了)

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

if (オーダー == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell").If(EachTickMode):シグナルを送信します。

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

を続けます。

}

//MoveOnce(ムーブワンス

if(MoveStopOnce && MoveStopWhenPrice > 0) { { //OrderOpenPrice()・Ask >= Point * MoveStopWhenPrice > 0

if(注文開始価格() - アスク >= ポイント * MoveStopWhenPrice) { { {?

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) { (オーダーストップ・ロス() > オーダーオープン・プライス() - ポイント * ムーブストップ・トゥ)

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

//トレーリングストップ

if(UseTrailingStop && TrailingStop > 0) { { (注文開始価格 - アスク) > (ポイント * TrailingStop)

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { { {

if((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange)を実行します。

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

}

}

}

 

コードに関する質問

i++やi--はコーディングにおいてどのような意味を持つのでしょうか?

例:for (int i=5; i>0;i--)

 
matrixebiz:
i++やi--はコーディングではどういう意味ですか? 例: for (int i=5; i>0;i--)

これは、C言語ベースの言語では、数値ベースの変数をインクリメントまたはデクリメントするためのショートハンドです。

例えば、Visual Basicでは、次のように書くことになる。

i = i + 1 と書くと、i変数が増加します。

しかし、C言語では、単にi++と書くことができます。

と書くだけです。

ハイエナ

 
hiachiever:
これは、C言語ベースの言語では、数値ベースの変数をインクリメントまたはデクリメントするためのショートハンドです。

例えばVisual Basicの場合、次のように書く必要がある。

i = i + 1 と書くと、i 変数がインクリメントされます。

しかし、C言語では、単にi++と書くことができます。

以上、よろしくお願いします。

ハイエナ

ありがとうございます。

ということは、if (int i=6; i>0; i++) と書くと、「ループ」することになります。

と書くと、「ループ」して、最大6まで値をチェックし 続けるのでしょうか? それが正しいかどうかはわかりません。もし、i--を使ったらどうなるのでしょうか?ということです。

 
matrixebiz:
ありがとうございます。

ということで、if (int i=6; i>0; i++) とすれば。

この場合、「ループ」つまり、最大6まで値をチェックし続けるのでしょうか? 正しいかどうかはわかりません。i-を使用するとどうなるのでしょうか?ということです。

マトリックスビズ

6 から始めて 0 に戻るなら、i-- を使う。

(int i=6; i>0; i--) とします。

これは 6 から始まり、I > 0 の間、ループごとに 1 ずつ減少します。

もし、0を含むなら、i>=0を使用してください。

ではまた。

ハイキュー

 
hiachiever:
Matrixebizです。

6から始めて0に戻したい場合は、i--を使います。

(int i=6; i>0; i--)

これは 6 で始まり、I > 0 の間、ループごとに 1 ずつ減少します。

もし、0を含むなら、i>=0を使用してください。

乾杯。

ハイチュウ

OK、ではもし私がif (int i=6; i>0; i++)

とすると、6から始まり、1、2、3...と6ずつ増えていくのですね?

 
matrixebiz:
OK、では、もし私が if (int i=6; i>0; i++) と書いたら、それは6から始まり、1、2、3・・・と6ずつ増分していくのですね?

6で終了させたいのであれば、全く問題ありません。

この場合、コードは次のようになります。

For (int i=1; i<=6; i++)

これは、1から始まり、6で終わり、各ループで1ずつ増加します。

では、よろしくお願いします。

ハイヒール