//+------------------------------------------------------------------+//| Подсчет открытых ордеров |//+------------------------------------------------------------------+int CountOrders()
{
int cnt=0;
int i=OrdersTotal()-1;
for(int pos=i;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==_Symbol)
{
if(OrderMagicNumber()==Magic) cnt++;
}
}
}
return(cnt);
}
そして、OnTick()の中で、bCheckOrders()の代わりに、次のように記述します。
//+------------------------------------------------------------------+voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfitif(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
{
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
CloseOrder();
}
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
前の雑誌と全く変わりません。
エラーも何もない
ループにブラケットは必要ないのですか?1行以上ない場合のみ、不要なようです。
UPD:
ああ、わかった、一行だけだ。
エラーはないはずなので、ログを表示します。
MT4のログブックの最後のページです。
は、このログが必要ですか?
MT4のログブックの最後のページです。
は、このログが必要ですか?
以下は、過去ログでの回答です)
注文を開いた後の関数bCheckOrders()は、注文がないことを出すので、開きっぱなしになってしまう
それに、頭が全然働かないんですよ、もちろんわかってはいたんですけど。
言い方が面白いですね)))
言い方が面白いですね)))
つまり、課題や比較の書き方は知っていても、やはり混乱してしまったのです。メチャクチャ。
そういうことじゃなくて...。
pribludilsa #:
、頭が 全く働かない。もちろん分かってはいたのだが。
以下は、過去ログでの回答です)
注文を開いた後のbCheckOrders() 関数では、注文がないことが判明し、開きっぱなしになってしまう
なんてこった、どこにそんなことが書いてあるんだ?
ログを正しく読んでいないのでしょうか?
注文を開始した後、関数bCheckOrders() は、注文がないため開始を継続すると表示します - by void OnTick() - 私はこれが真実ではないことを理解しています。
注文が終了するまでbCheckOrders() - 注文がないことを知らせる ことはできません。
くそっ、どこに書いてあるんだ?
ログを正しく読んでいないのでしょうか?
注文を出した後の関数bCheckOrders() は、注文がないため、 void OnTick()によって、注文を出し続けるという ことを出しますが、これは真実ではないことを理解しています。
注文が終了するまでbCheckOrders() は注文がないことを示さないように する。
bCheckOrders() が正しく動作しない!
オーダーカウントのための関数はすでに書きました。
このようにすれば、うまくいくはずです。
bCheckOrders()の代わりに、次の関数を入れて ください。
そして、OnTick()の中で、bCheckOrders()の代わりに、次のように記述します。