//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen()
{
double ma;
int res;
//---- go trading only for first tiks of new barif(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditionsif(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
return;
}
//---- buy conditionsif(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
return;
}
//----
}
if (IncreaseTP)
{
LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr); // PercentTakePr = 10; (десять процентов) эту строку считает
TStartS = MathRound(TStartS+TStartS/10*PercentTakePr); // а вот эту и все, которые ниже - нет
TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10*PercentTakePr); // ... причём, если деление на 100 заменить на деление на 10,
TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/10*PercentTakePr); // ... то начинает считать и эти строки, но уже, естественно...if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread; // ... рассчёт становится неверным...
}
if (IncreaseTP)
{
LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr); // PercentTakePr = 10; (десять процентов) эту строку считает
TStartS = MathRound(TStartS+TStartS/100*PercentTakePr); // а вот эту и все, которые ниже - нет
TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10 0*PercentTakePr); // ... причём, если деление на 100 заменить на деление на 10,
TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/100*PercentTakePr); // ... то начинает считать и эти строки, но уже, естественно...if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread; // ... рассчёт становится неверным...
}
Ask価格でBuyを開くのではないのですか? 。
そう書きました。"買い注文は Ask価格で開く"。
しかし、チャート上ではBid価格が表示されています。
そう書きました。"買い注文はAsk価格で開く"。
しかし、チャート上ではBid価格が表示されています。
アスクでバイを開けないの?そして、60pipsのスプレッドはありえないし(ギャップ後に取る場合)、その前に取るなら・・・EURの325pipsのスプレッドは等しいです。:)
あなたの写真にはポイントが表示されていません。
あなたの写真では、ポイントが見えませんね。
私はいつも両方の価格をチャートに表示しているのですが...。端末の設定で、F8でAsk`tsの表示を有効にしたのですが・・・。そして、スプレッドについて少し前の投稿を修正しました - それはできません。 。
しかし、Askの価格はバーに表示されていません。
広がりについて5桁の スプレッドなのか?もしそうなら、ニュースでのスプレッド拡大+スリッページ=6フル(60の5桁)ピップスです。
しかし、Askの価格はバーに表示されていません。
広がりについて5桁のスプレッドなのか?もしそうなら、ニュースの拡張スプレッド+スリッページ=6フル(60の5桁)ピップスです。
私があなたの問題を正しく理解していれば、注文の終了時刻に誘導されることはないはずです。オープンシグナルが発生し、ポジションがオープンされたバーの先頭から開始する必要があります。私ならどうするか、個人的には次のように考えます。
1) datetime型の変数を作成し、注文が成功した場合にTime[0]という値を入力します。
2) init()関数で、この変数を値「0」で初期化する。 コードをレビューするときに、より明確なので、私は明示的に初期化することを好みます。
3) ポジションを開く条件が揃ったら、OrderSend(...)リクエストを送る前に、この変数の値とTime[0]を比較し、等しくない場合はリクエストを送る。
4) もしポジションがオープンしたら、同じ変数にTime[0]の値を格納します。
しかし、Time[0]の値と比較する代わりに、OrderSend(...)リクエストの前にこのタスクを与えてみてください:現在のバーでStopLoss-yのクローズがあるかどうかをチェックしてください?それから、私は発表したStopLoss変数で動作するduble StopLoss()関数を入力する必要がありますか?それとも、原則的に不可能なのでしょうか?損切りをしたバーでは、たとえオープニングのパラメーターと合致しても、新しいポジションを開かないことが重要だと思います。
extern double Stoploss =1000;
問題は、タイミング的な要素は最後に考えるべきで--非常によく滑る--というか、命令の解釈がなぜか違う(あいまいな)ことが判明することです。
しかし、Askの価格はバーに表示されていません。
広がりについて5桁のスプレッドなのか?もしそうなら、ニュースで広がったスプレッド+スリッページ=6フル(60の5桁)ピップスです。
また、私の意見では、その後クリーンアップ:))、しかし、あなたが取得しない小さい時間枠の "メモリに保存"、 "ヘアピン "があるかもしれません...。
そして、履歴に関するテストについての質問:
は、Expert Advisor(簡単なものです!)を使用することができます。- ...)が、同じ時代、同じパラメータで、全く違う結果を出すでしょうか?
この2つのテストの間に私がしたことは、引用符のアーカイブを更新したことだけです...。と、そのような結果になったのでは!?- ということは、全部デタラメだったということか!?
なぜMathRound()の挙動がおかしいのか、誰か教えてください。大きな値でカウントし、小さな値ではカウントしない...。
ある変数の値を10%増加させる簡単なコードがあります。
算出された値はログに記録されます。1行目以外を10で割った場合、この1行は100番とカウントされ、問題はない。
2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: 計算機能:SL=11、TP=66、TStartS=60、TStop.Sell=20、TStopLastPosS=60、 TStop.SellLP=25
緑色で表示されているのは、コードの最初の行でカウントされるものです。
しかし、100で除算をかけると、(本来であれば)
...とすると、一番上の行を除くすべての行がカウントされず、まるで追加されていないかのように、初期値が残ります。
10%です。
2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: 計算機能:SL = 11 and TP = 66,TStartS = 30, TStop.Sell = 10, TStopLastPosS = 30, TStop.SellLP = 15
何がどこにあるか分かるように助けてください...です。:)