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

 

...

はい、できます。

唯一の制限は、デッドループで終わるような「循環呼び出し」に陥らないようにすることです。それ以外は、関数 呼び出しの制限は全くありません。

crsnape@btinternet.com:
良いポイント。私はそれを見ている。

関数に関する質問ですが、関数の中で関数を呼び出すことは可能ですか?例)こんな関数があります。

文字列 GetWinLossPreviousShort (int LastOpenTicket, 文字列 WinLossPreviousShort)

{

もし(...等

その後、私はそれを呼び出します。

double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)
 

最後にオープンしたオーダーを取得するために、以下のコードを入力しました。

//--- 最後にオープンしたオーダーのチケット番号を計算する関数

int LastOpenTicket()

{

datetime lastTime = 0;

int lastTicket = -1; // どれも開いていません。

int pos;

for (pos = OrdersTotal() - 1; pos >= 0; pos--)

if (OrderSelect(pos, SELECT_BY_POS) // 私の注文のみ w/ - && OrderMagicNumber?

&& OrderMagicNumber() == MagicNumber // 私のマジックナンバー

&& OrderSymbol() == Symbol() // そして私のペア。

&& OrderOpenTime() > lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

return (lastTicket);

}

この関数は私のGetLots関数から呼び出されます。コンパイラはエラーフリーですが、バックテストでは 結果セクションが完全にクリアされています。トレードはありません。これは、最初のトレードが、上記のコードで呼び出す前のトレードを持っていないためでしょうか?

ジャーナルでは、外部変数の読み込みまではできているのですが(マジックナンバー42を読み込みますが、私のコードでは42552...?)、それ以降は何もできません。

 

...

マジックナンバーの宣言はどうなっていますか( int MagicNumber; とする必要があります)

crsnape@btinternet.com:
私は最後に開いた注文を取得するためにこのコードを入力しました。

//--- 最後に開いた注文のチケット番号を計算する関数

int LastOpenTicket()

{

datetime lastTime = 0;

int lastTicket = -1; // どれも開いていません。

int pos;

for (pos = OrdersTotal() - 1; pos >= 0; pos--)

if (OrderSelect(pos, SELECT_BY_POS) // 私の注文のみ w/ - && OrderMagicNumber?

&& OrderMagicNumber() == MagicNumber // 私のマジックナンバー

&& OrderSymbol() == Symbol() // そして私のペア。

&& OrderOpenTime() > lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

return (lastTicket);

}

この関数は私のGetLots関数から呼び出されます。コンパイラはエラーフリーですが、バックテストでは結果セクションが完全にクリアされています。トレードはありません。これは、最初のトレードが、上記のコードで呼び出す前のトレードを持っていないためでしょうか?

ジャーナルでは、外部変数をロードするところまではいいのですが(そのうちのマジックナンバー42をロードしますが、私のコードでは42552です...?
 

はい、そうです int MagicNumber = 42557

 

...

では、投稿されたコードから、なぜそれが間違っているのか(例えば、なぜ間違ったMagicNumberを受け取っているのか)わかりません。このコードは、指定されたMagicNumberで開かれた注文があれば動作するはずです(開かれた注文をループします)もし開かれた注文がないか、MagicNumbersとシンボルが一致しなければ-1を返します(あなたが期待するように)そのコードは正しいです(今テストしましたが、その通りに動作しました)。

申し訳ありませんが、あなたが投稿したコードからできることはこれだけです。

crsnape@btinternet.com:
はい、それはint MagicNumber = 42557です。
 

前回の注文がなく、今回が初めての注文の場合はどうなるのでしょうか。私のGetLots関数は、最後に開いた注文チケット 番号の呼び出しに依存しているので、このコードは-1を返すことは分かっていますが、EAの実行に失敗するでしょうか。

 

もし、少なくとも1つの前の注文が存在することに依存している場合は、失敗します。

次のような条件を追加してください。

if (LastOpenOrder()==-1)

... 残りの条件が全て満たされれば、注文を開くことができます。

それ以外

...前と同じように最後に開いた注文をチェック し、残りの条件もチェックする

(といった具合に、EAの条件を自由に推測することができます。)

crsnape@btinternet.com:
前回の注文がなく、今回が初めての注文の場合、どうなるのでしょうか?私はそれが-1を返すことを知っているが、私のGetLots関数は、最後に開かれた注文チケット番号を呼び出すことに依存しているので、コードのEAが実行に失敗するでしょうか?
 

こんにちは、Mladenです。

ストキャスティクスラインが レベル20または80でクロスしたときに、オープントレードを設定する方法をご存知でしょうか?

ストキャスが20の水準でクロスしたとき(売られすぎ)、ロング

ストキャスティクスが80の水準でクロスした場合(売られすぎ)、ショート

回答

ライアン

 

このコードに数行追加しました。これはLastOpenTicket()関数を使用するものですが、まだ気に入らないようです。オプションに-1を追加しました。何か間違っているように見えますか?

//--- 直前の売り注文が 利益を上げているかどうかを判断する

文字列 GetWinLossPreviousShort (int LastOpenTicket, 文字列 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() > 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL))|| LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}

}

 

...

この関数の 結果をもう一つ追加してみてはどうでしょうか。例えば、When LastOpenTicket() == -1 then WinLossPreviousShort="Na"

crsnape@btinternet.com:
このコードに数行追加しました。これはLastOpenTicket()関数を使用するものですが、まだ気に入らないようです。オプションに-1を追加しました。何か間違っているように見えますか?

//--- 前回の売り注文が利益を生んでいるかどうかを判断する。

文字列 GetWinLossPreviousShort (int LastOpenTicket, 文字列 WinLossPreviousShort)

{

if (オーダーセレクト(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() > 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL))|| LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}

}