//+------------------------------------------------------------------+//| stohastic_system.mq4 |//| Анатолий | |//+------------------------------------------------------------------+externdouble Lots=0.4;
externint TakeProfit=50;
externint NWave=2;
externint K=9;
externint D=3;
externint slowing=5;
externint Average_method=2;
externint price_field=0;
int K_level=0;
int down=0;
int up=0;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int ticket=0;
double stoch_1=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,1);
double stoch_2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);
double stoch_3=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,3);
int Hour_curr=TimeHour(TimeCurrent());
if ((stoch_1>90)&&(stoch_2>70)) K_level=90;
if ((stoch_1<10)&&(stoch_2<30)) K_level=10;
if(OrdersTotal()<1)
{
if((Hour_curr>=1)&&(Hour_curr<24))//проверка сигналов только в этот промежуток времени
{
if((K_level==10)&&(stoch_1>10))//сигнал на покупку
{
RefreshRates();
Print("Сигнал на покупку. stoch_1=",stoch_1," stoch_2=",stoch_2);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,Ask+TakeProfit*Point,"buy_order1",1,0,Blue);
K_level=10;
down=0;
}
if((K_level==90)&&(stoch_1<90))//сигнал на продажу
{
RefreshRates();
Print("Сигнал на продажу. stoch_1=",stoch_1," stoch_2=",stoch_2);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,Ask-TakeProfit*Point,"sell_order1",1,0,Red);
K_level=90;
up=0;
}
}
}
return(0);
}
なぜなら、これらはローカル変数で、2回目のクリックですでにチケットの代わりにゴミが格納されるからです。
ありがとうございました。正直、ずっと考えていました
トレーラーをご覧ください。その中身を端末のExperts フォルダに入れる。興味のある商品のタイムフレームを選択し、Expert Advisorのチャート上に配置します。
MetaTraderの外部変数で注文を開くためのパラメータを設定します。
そして、選択した商品の時間枠に新しいバーが形成されるのを待ちます。
Expert Advisor がマーケットから注文をオープンするとき、そのオープン時刻と新しいバーをオープンする時刻を比較します。
Romanさん、約束通り、Expert Advisorで「始値で開く」作業をすると、実際にどうなるかを紹介したいと思います。まず、1時間足チャートに置いた次のティックでEAをトリガーし、次のローソク足の始点で2回目の トレードを開始します。なぜかというと、まだ理解できないのです。第二に、取引の開始価格が 新しいローソクの開始価格と一致しないことです。
2012.02.24,12:00,1.3392,1.3405,1.3383,1.3387,768 - キャンドルは1.3392で開き、注文は1.3390でトリガーされる。設定でスリッページを1ポイント指定しています。もし私が0pipsを入力すると、EAは全くトリガーされません。
ログを添付しました。私にとって重要なことは、やはりオープニングオーダーがローソク足のオープニングプライスに一致することです。
こんにちは、皆さん。明確な説明をお願いしたい。
コード内で OrderDelete とOrderSend コマンドを順次 書き、 EAがティック#1で両方のコマンド(撤退+設定)を実行する信号を受信した場合、という理解で合っていますか?
- この2つのコマンドは同じtick #1では実行できず、その実行は少なくとも3tick 分伸びる。
- をクリックすると、OrderDeleteコマンドが発行されます。
-OrderDelete が送信された後、次のティック#2 で 初めて 結果が返され、同じティック#2 で初めて OrderSend コマンドを送信することができます。
- の場合、OrderSendコマンドの結果は、3番目のティックにのみ知る ことができます。
ということでしょうか。
また、同じティックでMTに2つのコマンドを送ることはできないのでしょうか?
MT4でEAを書いています。
ありがとうございます。
こんにちは、皆さん。明確な説明をお願いしたい。
コード内で OrderDelete と OrderSend コマンドを順次 書き、 EAがティック#1で両方のコマンド(撤退+設定)を実行する信号を受信した場合、という理解で合っていますか?
- この2つのコマンドは同じtick #1では実行できず、その実行は少なくとも3tick 分伸びる。
- をクリックすると、OrderDeleteコマンドが発行されます。
-OrderDelete が送信された後、次のティック#2 で 初めて 結果が返され、同じティック#2 で初めて OrderSend コマンドを送信することができます。
- の場合、OrderSendコマンドの結果は、3番目のティックにのみ知る ことができます。
ということでしょうか。
また、同じティックでMTに2つのコマンドを送ることはできないのでしょうか?
MT4でEAを書いています。
ありがとうございます。
ティックとは、新しい引用のことです。また、 OrderDeleteと OrderSendの コマンドの間には何の関連性もない
ニュースの更新やスリッページがあれば、単純なOrderSendが実行される頃には十数ティックが経過していることでしょう。また、市場が夜間平場の場合、両方のコマンドが1ティック以内に実行されることがあります
。
また、例えば、ある注文がストップロスをトリガーし、同じティックで別の注文をオープン/クローズしようとすると、衝突が発生することがあります。そうすると、場合によっては、サーバーから操作の実行を許可されないことがあります。
I.e.質問に対する答えはノーです、違います))
ティックとは、新しい引用のことです。また、 OrderDeleteと OrderSendコマンドの実行時間との関連はない。
ニュースの更新やスリッページがあれば、単純なOrderSendが実行される頃には十数ティックが経過している。また、市場が夜間平場の場合、両方のコマンドが1ティック以内に実行されることもあります。
MTは、私の理解では、ティッキングによってサーバーから情報を引き出しています(そして、サーバーは、新しいティッキングを送信すると同時にコマンドの回答を与えており、時間によるコストの最適化を図っています)。そして、新しいティックが届く前には、何もわからない。そういうことなんです。でも、その思い込みは間違っているのかも?ご 質問は、ダースティックというより、ご指摘の2つ目の選択肢、ダークティックが遅い場合との関係です。
このように、コマンド#1で反応を得ることは、コマンド#2に行き、完全に処理するための前提条件にはならないということを、私は正しく理解したでしょうか?
コマンドレスポンスは「非本質的」な部分?その存在は、次のコマンドに進むために重要ではないのでしょうか?
下のalsuさんと議論になったのですが、私も彼と同じように「レスポンスがあることが重要だ」と思い込んでいたようです。1回のティックで2つのコマンドを実行できると書いてありますね。サーバーからの情報は、見積もりフローとはまったく関係なくやってくるわけですね。
ありがとうございます。
刻みの速さにもよりますが。一般に、OrderDelete、OrderSend などの値を返す関数は、非同期に実行されない。つまり、操作全体が渡され、エラーコードが返されるまで(成功した場合は NO_ERROR)、次の演算子は実行されない。もうひとつは、この間にいくつかのティックが実行されるかもしれませんが、それらはstart()関数では処理されません。 。
また、例えば、ある注文がストップロスをトリガーし、同じティックで別の注文をオープン/クローズしようとすると、衝突が発生することがあります。そうすると、場合によっては、サーバーから操作の実行を許可されないことがあります。
すなわち、あなたの質問に対する答えは、「いいえ」です))
自分の言葉によれば、まさに「そう」であることがわかるのに、どうしてそうではないのでしょうか。)) それとも、また何か勘違いしているのでしょうか?回答では、前の演算子のエラーコードを 処理してから次の演算子を実行するように関数を実行すると書かれていますね。 同じティック#1では2つのコマンドは 実行できない」というのは、レスポンス、つまりその応答やエラーコードが新しいティックで最も早く表示 されるから、ということだと思います。 それとも、そうではないのでしょうか?それとも、コマンドの応答は、引用ストリームとは無関係に、別のタイムドストリームで行われるのでしょうか?おそらく私の間違いは、コマンドの実行結果が新しい引用符で返されると仮定したことでしょうか。
もちろん、主に刻みが遅い状況を想定してのことです。
MTは、私が理解する限り、potikovoサーバーから情報を引き出す(そしてサーバーは、順番に、新しいティックを送信すると同時にコマンドの応答を与える、これは時間コストを最適化する)。そして、新しいティックが届く前には、何もわからない。そういうことなんです。でも、その思い込みは間違っているのかも?ご 質問は、ダースティックというより、ご指摘の2つ目の選択肢、ダークティックが遅い場合との関係です。
このように、コマンド#1でレスポンスを得ることは、コマンド#2に行き、完全に処理するための前提条件にはならないということですが、正しく理解できましたか?
コマンドレスポンスは「非本質的」な部分?その存在は、次のコマンドに進むために重要ではないのでしょうか?
下のalsuさんと議論になったのですが、私も彼と同じように「レスポンスがあることが重要だ」と思い込んでいたようです。1回のティックで2つのコマンドを実行できると書いてありますね。サーバーからの情報は、見積もりフローとは全く関係なくやってくるのですね。
ありがとうございます。
こんにちは。私はプログラミングが全く得意ではありません。私はコーディングの経験があまりないので、私のコードにclosing positions byStopLossとTrailingStopを追加するのを助けてください。エキスパートアドバイザーは私のものではありませんが、戦略は私のためにEAを再加工するので、試行錯誤は悪くない - と正直に言うと、私はすでに私の心を吹いている、とあまり時間がありません - 仕事。すでに試行錯誤を繰り返していますが、正直なところ、無駄な時間を過ごしている暇はないのです。そして、それをどうするかというと、こうです。