if( условие на покупку или продажу)
{
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)==true) // если есть уже ордер то проверяем
{
if (OrderOpenTime()!=Time[1]||OrderOpenTime()!=Time[2]||OrderOpenTime()!=Time[3]) // если открытый ордер имеет значение(OrderOpenTime) не равное времени бару назад и тд. до 3 баров.
{
TimeBar=Time[0];
OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),2,0,0,"ntcn",Magic,0,Blue); // тогда открываем
}
}
}
しかし、うまくいかない......どうすれば違うのか?知識を教えていただけるとありがたいです。
もし、同じ問題に直面したことがある方がいらっしゃいましたら、ここにその答えがあります。
if( условие на покупку или продажу)
{
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES); // проверяем последний ордерif(OrderOpenTime()<Time[3]) // если по времени прошло 3 бара тогда можно открывать новую сделку
{
TimeBar=Time[0];
OrderSend(Symbol(),OP_SELL, LOT,NormalizeDouble(Bid,Digits),2,0,0,"ntcn",Magic,0,Red);
}
}
こんにちは、S. Kovalevのチュートリアルのスクリプトをベースにしました。Expert Advisorで、取引を開始し、損切り、利益確定を行い、取引の終了(損切りまたは利益確定)を待って、その後にのみ取引を再開するようにしたいのですが、可能でしょうか?サイクル、サイクル割り込みで試しました。どうしたらよいかアドバイスをお願いします。ストップロスやテイクプロフィットを一度に設定せず、一定水準に近づいたら決済する方が楽かもしれないと思いましたが、スリッページが怖いのと、一点一点が重要なので、そのようなやり方はしたくありません。1つの案件や2つの案件を一度に開こうとすると、新しい案件を開くことができない。
//+------------------------------------------------------------------------------+
int start() //---- function start
{
double //---- 変数の宣言
x,
y;
//+---------------------------------------------------------------------+
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+15*Point); //----買いの成行注文、始値から15ポイントにストップと利益を入れる
//+--------------------------------------------------------------+
while(x!=Ask-15*Point|||y!=Ask+15*Point)//---- 前の取引が終了するまで、取引を終了させたい条件の、すなわちе.が可能です。
{//----- 1つの取引だけをオープンにしておく
続けてください。//---- 条件を中断して次のステップに進む
}
//+------------------------------------------------------------------+
return;//---- function return
}
//+-----------------------------------------------------------------------------+.
そう、建値のみです。だからこそ、EAを分析するときにそれを考慮することが重要なのです。例えば、ローソクの尾がチャンネルを割った場合、Expert Advisorには表示されないかもしれませんが、プログラムロジックを変更することで問題を解決することができます。
Q: ここにコードの一部があります。
int init()
{//----
ShiftSignal=0;
SlowPer=FastPer+AddSlow;
Spread=MarketInfo(Symbol(,MODE_SPREAD));
Comment("ExpertMagicNumber=",ExpertMagicNumber);
if ((FastShift<0)&&(SlowShift>=0))
ShiftSignal=FastShift;
if ((FastShift>=0)&&(SlowShift<0))
ShiftSignal=-SlowShift;
if ((FastShift<0)&&(SlowShift<0))
{
if ((MathAbs(FastShift)>MathAbs(SlowShift)))
ShiftSignal=-FastShift;
、
ShiftSignal=-SlowShift;
}
//----
return(0)
この断片に興味があります
if ((FastShift<0)&&(SlowShift>=0))
ShiftSignal=FastShift。
FastShift<0 の場合、FastShift の値が初期状態で負の整数に等しいことを意味します。
とすると、次の行で ShiftSignal=FastShift となります。
変数ShiftSignalに0ではなく-2が代入 されると考えるのが自然でしょう。
が、同時に、なぜ FastShift 変数の前にマイナスがあるのか不思議に思うかもしれません。
なぜなら、数学ではマイナスに対するマイナスはプラス、つまり「+2」、つまりちょうど2という値になるからです。
必要であれば、すべてのコードをお送りします。
このような問題を解決するのを助けてください。
売買のシグナルはあるが、次のバーのシグナルは考慮されないので、次のバーも条件を満たす。
どうすればいいのか、でもうまくいかない。
しかし、うまくいかない......どうすれば違うのか?知識を教えていただけるとありがたいです。
もし、同じ問題に直面したことがある方がいらっしゃいましたら、ここにその答えがあります。
誰も回答してくれないので、私の質問を再構成してみることにします。
iCastom()関数がゼロだけを与える場合、コンパイルされたインジケータから情報を引き出す方法はありますか?
こんにちは、ポジティブなシグナルの後、バーカウントを開始する方法を教えてください。
- 私は、次の2つのバーが上がった後にのみ、信号、オープンベイを取得します。
Olegさん、条件はあまり厳密ではありません。例えば、未決済注文のカウントを開始し、1つ以上未決済であれば、(このサイトですぐに使える機能を使用) 。
残念ながらシグナルは繰り返されることもあります(買い増しという意味で、1時間後、1日後など)。私はOrderComment、ブロッキングを経ていますが、繰り返される注文もあります。繰り返しの信号に対してバーでブロックしたい。Sleepage 経由だと時間枠が違って4時間...。
それをどうしたらいいのかわからないと、間違った答えが返ってくる。
残念ながらシグナルも繰り返しがあります(おまけという意味で、1時間後、1日後など)OrderComment, blockを経てきましたが、繰り返しの注文もあります。繰り返しの信号に対してバーでブロックしたい。Sleepage経由だと時間枠が違って4時間...。
でも、回答ありがとうございました。
支店のホームページを検索する
バー1本での取引を禁止する。