[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 268

 

extern string AlliesO1 = "GBPUSD"; - валюта

string AlliesO[5]; - массив в котором хранятся валюты.



Так я проверяю нужно ли добавлять валюту в массив. (Изначально вместо валют нули, всего валют 5)

if (StringLen (AlliesO1)>2)
{
CountAlliesO++;
AlliesO [0] = AlliesO1;
}





Потом в цикле перебираю валюты и на каждой валюте открываю ордер.

for (int i=0;i<CountAlliesO;i++)

{
l_ticket_4 = OrderSend(AlliesO[i], OP_BUY, Lots, NormalizeDouble(Ask, Digits), l_slippage_8, iif(StopLoss == 0.0, 0, NormalizeDouble(Ask - StopLoss / MathPow(10, Digits), Digits)), iif(TakeProfit == 0.0, 0, NormalizeDouble(Ask +
TakeProfit / MathPow(10, Digits), Digits)), 0, Magic, 0, CLR_NONE);
Print ("Ticket " + Allies[i] + ": " + l_ticket_4);
}



これが出力されるのです。

22:05:25 RSI_Valut_Test2 EURUSD,H1: CountAlliesO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: CountEnemyO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: Allies: GBPUSD // - ループ内でAlliesO[i]をプリント。
22:05:25 RSI_Valut_Test2 EURUSD,H1: 味方: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: 敵:USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: 敵:USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: チケット USDCHF: -1

22:05:25 RSI_Valut_Test2:OrderSend 関数の シンボル名は文字列でなければなりません。


まあ、一般的にはそうなんですが、配布しないでくださいということで、すべてのコードをお渡しすることはできませんが......。さて、これらのデータを出力するプリンターが2台ほど投入されましたが...。文字列として宣言されているのに、なぜ文字列でないと言われるのでしょうか?


助けてください、よろしくお願いします。

 

皆さん、こんばんは。数本のバーが開かれた後に注文を閉じるための適切な関数を書く方法と、この数を最適化する方法をアドバイスしてください。

 

CountBars -バーの数 です。

チケット - 注文番号です。

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


オフセットの計算方法がよくわからないので、バーの数についてはよくわからないが、-1かもしれないし、+1かもしれない。まあ、M1で確認するのは難しいことではありませんが...

そんな感じなんですか?

 
PODLIY16:

CountBars - バーの数です。

チケット - 注文番号です。

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


オフセットの計算方法がよくわからないので、バーの数についてはよくわからないが、-1かもしれないし、+1かもしれない。まあ、M1で確認するのは難しいことではないのですが...。

これで終わり?

 
isaev-av:

そうですね、私はプログラマーではありません。 今からやってみます。 メインはTFで動作させることです。
 
void CloseAfterSomeBar (int CountBars, int Ticket)
{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES);
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (BarShift>=CountBars)
{
if (OrderType() == OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


これは正しいです、正しいバーが開くとすぐに注文を閉じます、例えば今試したM1では、注文は9分目に開き、11時1分に閉じました。

 
RSIやストキャスティックの指標にMAを重ねる方法、つまりチャートからではなく指標からMAを取り出す方法を教えてください。
 
うまくいかない。もしかしたら、誰かが訂正してくれるかもしれません。皆さん、こんばんは。数本のバーが開かれた後に注文を閉じるための適切な関数を書く方法と、この数を最適化する方法をアドバイスしてください。
ファイル:
 

2つの新しい変数で試してみてください。


extern bool IfTrueThenCountBarWork = false; // - falseの場合、この関数は動作しません、動作するために、trueを設定する必要があります。

extern inttern CountBar = 0; // - クローズするまでのバー数。以上、バーの数え方について説明しました。


何かお役に立てたのなら幸いです。

ファイル:
 
PODLIY16:

2つの新しい変数で試してみてください。


extern bool IfTrueThenCountBarWork = false; // - falseを設定すると、この関数は動作しませんので、動作させるにはtrueを設定する必要があります。

extern int CountBar = 0; // - クローズするまでのバー数。バーの数え方、上に書きました。


少しでもお役に立てたのなら幸いです。




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