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

 

別の初心者の質問

こんにちは、私はプログラミングは初めてですが、トレードは初めてではありません。しばらく投稿していなかったのですが、EAを開発し始めてから、たくさんの質問があります。まずインジケーターを作ることから始めて、それが思い通りに動作するようになったら、もっと先に進みたいと思います。マニュアルは全て読みましたので、いよいよコーディングに取り掛かります。

もし間違ったスレッドであれば申し訳ありませんが、そのような質問をどこに投稿すべきか教えてください。

私は今、2つの、おそらく基本的な質問があります、お願いします。

1.MAを使用する多くの指標で、チャート上に何本のバーがあるかをチェックする線を見かけます。MA200が必要で、チャートが例えば100本しかない場合、iMA200は機能するのでしょうか?確認したところ、どのMAもどのチャートでも問題なく描画されたので、これは古いバグで、現在Metaquotesが修正したものと思われます。ということは、MAを描画したり、iMA関数を使うために、チャートに何本バーがあるか確認する意味はあるのでしょうか?

2.2.CloseとiCloseの違いは何ですか?私の理解では、Closeは現在のチャート上のバーの終値のみを返し、iCloseはどの通貨ペア、どの時間枠の終値も返すことができます。どちらの場合も、最後に閉じたバーを取得するために、インデックス[1]を使用しなければなりません。私の見方は正しいでしょうか?

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

 

Iveはすでにそれをしました。以下の赤色のハイライトを参照してください。

//--- 前の売り注文が 利益を生むかどうかを判断する

文字列 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);

}

}

}

まだ真っ白です。

頭をかきむしっています。コードを貼り付けていないので、あなたの助けは限られていると思いますが、上記のコードは問題ないように見えますか?

また、以下の1行目ですが、LastOpenTicketの後に()をつけて参照する必要があるのでしょうか?

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

 

...

もし、最後に開いたチケットのチケット番号を引数としてその関数を呼び出して いるなら、青線の後のコードは決して実行されません(LastOpenTicket番号が-1(その瞬間はLastOpenTicket()関数結果と同じ)ならOrderSelect()は失敗し、青線の後のブロックはコードが実行されないのです)。

crsnape@btinternet.com:
私はすでにそれをしました。以下のハイライトされた赤を参照してください。

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

文字列 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);

}

}

}

まだ真っ白です。

頭をかきむしっています。コードを貼り付けていないので、あなたの助けは限られていると思いますが、上記のコードは問題ないように見えますか?

また、下の1行目ですが、LastOpenTicketの後に()をつけて参照する必要があるのでしょうか?

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

よくわからないのですが

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

つまり、上の行でLastOpenTicket()という関数を呼び出して いるので、その関数の残りは実行されず、OrderSelect()は失敗する。私はあなたに従って正しいですか?

 

...

次のように仮定してみましょう。

- あなたは以前の注文がありません

- LastOpenedTicket() が結果として -1 (前の注文がない) を返したとします。

- その結果で関数を呼び出すと

注文 チケット -1 が存在しないので OrderSelect() は失敗し、注文選択の背後にあるコードは何も実行されません。LastOpenTicket が > -1 の場合でも、LastOpenTicket() == -1 という「青い線の条件」は、LastOpenTicket が > -1 のときしか、そのコード部分に到達できないので、決して真にはなりえません。

そのため、「3つ目の状態:Na」を提案しました。

crsnape@btinternet.com:
よくわからないのですが

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

つまり、上の行で関数LastOpenTicket()を呼び出しているので、その関数の残りは実行されず、OrderSelect()は失敗する。私はあなたに従って正しいですか?
 

コーディングに関する質問、たぶん初心者向け

こんにちは、私はプログラミングは初めてですが、取引は初めてではありません。私はEAを構築していますが、まずインジケータを構築することから始め、それが私が望むものを行うようになったら、さらに進めていきます。私は見つけることができるすべてのマニュアルを読んで、現在それをコーディングしています。

どんなアドバイスにも感謝します。

私は今、2つの、おそらく、基本的な質問があります、お願いします。

1.MAを使用するいくつかの指標で、チャート上にいくつのバーがあるかをチェックする線を見かけます。MA200が必要で、チャートが例えば100本しかない場合、iMA200は機能するのでしょうか?確認したところ、どのMAもどのチャートでも問題なく描画されたので、これは昔の問題で、現在はMetaquotesが修正したものと思われます。ということは、MAを描画したり、iMA機能を使用するために、チャートに何本のバーがあるかを確認する意味はあるのでしょうか?

2.2.CloseとiCloseの違いは何ですか?私の理解では、Closeは現在のチャート上のバーの終値のみを返し、iCloseはどの通貨ペア、どの時間枠の終値も返すことができます。どちらの場合も、最後に閉じたバーを取得するために、インデックス[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)

{

WinLossPreviousShort = "L";

(WinLossPreviousShort)を返します。

}

if (LastOpenTicket() == -1)

{

WinLossPreviousShort = "NA";

(WinLossPreviousShort)を返します。

}

}

}

OR THIS?は赤色で変更されます。

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

文字列 GetWinLossPreviousShort (int LastOpenTicket,int LastTicket, string 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)

{

WinLossPreviousShort = "L";

(WinLossPreviousShort)を返します。

}

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

(WinLossPreviousShort)を返します。

}

}

}

 

1は存在しないので、-1のチケット番号でOrderSelectを使用することはできません。チケットは0から上に行きます。

OrderSend関 数の外側でLastOpenTicketを宣言する必要があるのでは?

 

...

このように試してみてください。

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

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)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

mladenさん、ありがとうございます!下のコードは基本的に皆さんと同じになるのでしょうか?あなたが最後に投稿したときにこれを入力しました!:-)

EDITED-

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

文字列 GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, 文字列 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)

{

WinLossPreviousShort = "L";

(WinLossPreviousShort)を返します。

}

}

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

}

理由: