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

 

demlin:
Еще вопрос: какой функцией можно вытащить стоимость одного пункта инструмента?

https://docs.mql4.com/ru/constants/marketinfo

MarketInfo(Symbol(), MODE_TICKVALUE);
 
LazarevDenis:

EAを1時間に1回しか取引しないようにするには、どのようなコードをEAに記述すればよいか教えてください。

例えば、EAがトリガーされ、注文が開かれ(それ以上には興味がない)、私は1時間のタイムフレームで現在のバーで注文を開かないようにしたい。

全部同じに見える

int hh
int CurrentHour
CurrentHour=TimeHour(TimeCurrent())とする。
if (CurrentHour!=hh)
{
OrderSend(Symbol()、OP_BUY、0.01、Ask、3、Bid-3*Point、Bid+3*Point)を実行。
hh=TimeHour(TimeCurrent())。
}

しかし、数え切れないほどの注文がある

int hh = 0;
は、start() および init() の前に設定する必要があります。
 
みんな、履歴のテスターで手動取引用のEAを探すのを手伝ってくれ。コードベースにはいくつかありますが、nrafikの左下に あるキャプションをドラッグして制御したものが必要です。非常にシンプルで、見つからない。HistTrainingとVisualisationのテスト。マニュアル取引はNGです。非常に簡単なアドバイザーで、テストを停止するレベルを設定することも可能でした。
 
demlin:

皆さん、こんにちは。

この意味を教えてください。

買い注文......失敗 [取引タイムアウト]。

特に、どのようなタイムアウトなのかに興味があります。

https://www.mql5.com/ru/forum/112612
これは期限切れのサーバーレスポンスである --- 取引が開かれたかどうかにかかわらず。また、トレードが開かなかったという 保証はありません。

だから、1分後に注文が開かれているかどうかを確認してから、取引を続行しなければならない。

 

rlx です。


は、start() および init() の前に設定する必要があります。


int hh = 0; int init() { return(0); }.int start() { //------------------------------------------------- int countorder; countorder=OrdersTotal(); if (countorder==0) { Alert ("no open orders"; }else { Alert ("have open orders"; } int hh; int CurrentHour; CurrentHour=TimeHour(TimeCurrent()); if ((CurrentHour!=h)&&(countorder==0)){ OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point); hh=TimeHour(TimeCurrent()); } ・・・・・・・・・・。//------------------------------------------------- return(0); }.int deinit() { return(0); }.































言われた通りやってみたが効果なし、未決済注文のカウントを追加したら、決済後すぐに注文が開くようになった。

OrderCloseTime()で回避したところ、うまくいったようです。

int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders");
}
int hh;
int CurrentHour;
int LastOrderCloseTime;
CurrentHour=TimeHour(TimeCurrent()).LastOrder(); int LastOrder().LastOrderCloseTime; int LastOrder().LastOrder(); int CurrentHour=TimeHour();


OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY); hh=TimeHour(OrderCloseTime());


if ((CurrentHour!=hh)&&(countorder==0)){ OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point); }.


 
rlx:

https://www.mql5.com/ru/forum/112612
これは、サーバーが応答するまでの待ち時間で、取引が開始されたかどうかを示します。また、取引が開始されて いない保証はありません。

そのため、開発者が推奨しているように、1分後に注文が開始されたかどうかを確認し、その後で操作を行うようにしてください。

回答ありがとうございました。
 
Roger:

ただし、面倒なことはしたくない。

OrderTotal() がゼロの場合、どのように注文が開かれるのか説明してください。

ありがとうございます。


下図は、その条件で実行されるコードのブロックを括弧で限定したものです。

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

OrderSend() 操作は、 この条件の影響を受けない

 

バー・ナンバーを取得する方法、「未来」において :)

iBarShift() は、ヒストリーからバー番号を取得するのには問題ありませんが、このようなコードで、行を右側に移動した場合、つまりゼロバーを超えた場合は、どのようにしてバー番号を取得するのでしょうか。

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   Comment("Координата X = ",iBarShift(NULL,0,X),"\n",
           "Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}
 
IgorM:

バー・ナンバーを取得する方法、「未来」において :)

iBarShift() は、ヒストリーからバー・ナンバーを取得するためにはうまく機能しますが、このコードで行を右にシフトした場合、つまりゼロ・バーを超えた場合、どのようにしてバー・ナンバーを取得できるのでしょうか。

Time[0]からの相対的なオフセットを取得することができます。

shift = MathRound((Time[0] - X) / (Period()*60));
 
rlx:

Time[0]からの相対的なオフセットを取得することができます。

ありがとうございました。これで万事OK!

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   if(X<=Time[0])
         Comment("Координата X = ",iBarShift(NULL,0,X),"\n",  "Время = ",TimeToStr(X));
   else
         Comment("Координата X = ",MathRound((Time[0] - X) / (Period()*60)),"\n","Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}