void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
いつも注文数-1、つまりOrdersTotal()-1が入っていることを知っていて、すべて動いていたのですが、プログラムを書き始めたら、突然1つの注文がカウントされなくなり、OrdersTotal()に問い合わせたら、3-1ではなく注文数合計=3となってしまいました。
どうなるのでしょうか?
ヘルプにあるループの通常の形
。
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}.
つまり、1次がゼロに等しい。
しかし、いや、実は1次が1なのだ。つまり、ゼロからではなく、1から探索を始めるべきだということか。
メタクオーツが何か悪いことをしたのか、私がバカなのか?
こんにちは、OrdersTotal()はどうしたのでしょうか?ずっと
注文数-1、つまりOrdersTotal()-1が入っていることを知っていて、すべて動いていたのですが、プログラムを書き始めたら突然1つの注文がカウントされなくなりました。 OrdersTotal()を求めたら、3-1ではなくtotal orders = 3と出てきました。 どうしたのですか?ヘルプにあるループの通常の形 。
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}.
つまり、1次がゼロに等しい。
しかし、いや、実は1次が1なのだ。つまり、ゼロからではなく、1から探索を始めるべきだということか。
メタクォーターが何か悪いことをしたのか、私がバカなのか?
RELATED ORDERSとPOISONSがごちゃごちゃになってますね。参考文献を読む削除されたオーダーとポジションのどちらをカウントするのか、具体的に教えてください。そして、はい、何も変わっていません - 最初の要素のインデックスは '0' で始まります。
追加:例
例:ポジションと未決済注文の計算
RELATED ORDERSとPOSITIONSがごちゃごちゃになっています。参考文献を読むより正確には、「退職者数」なのか「役職数」なのか、どちらでしょうか?そして、はい、何も変わっていません - 最初の要素のインデックスは '0' で始まります。
追加:例
例:ポジションと未決済注文の計算
MQL5ではなくMQL4のことです、保留と成行注文に違いはありません
MQL5ではなくMQL4のことです!保留と市場保留に分かれていません。
MQl5フォーラムに書き込んでいます。メインセクションに書き込んでいますね。MQL5フォーラムに投稿すると、MQL5に関する回答が得られます。
旧ターミナルに関するご質問は、特別セクション:MQL4とMetaTrader 4に お願いします。これからは、そこに書き込んでください。ご質問はそちらに転送させていただきます。
最初のバージョンでは、OrdersTotal()-1を使用して、ゼロから検索を開始しました - エラーが発生しました
. 2番目のバージョンでは、1から開始してOrdersTotal()全体を取得しました - 今回はエラーなし
スクリーンショットでは、OrdersTotal() が OrdersTotal()-1ではなく 、実際の注文数を表示していることがわかります ...
問題は、なぜOrdersTotal()が-1ではなく、実際の 注文 数を表示するのか、このようにあるべきなのか、それとも何か新しい ことがあるのかです。
なぜなら、この場合、ゼロからではなく、イチから探すべきだからです
最初のバージョンでは、OrdersTotal()-1を使用して、ゼロから検索を開始しました - エラーが発生しました
. 2番目のバージョンでは、1から開始して、OrdersTotal()全体を取得しました - 今回はエラーなし
スクリーンショットでは、OrdersTotal() が OrdersTotal()-1ではなく 、実際の注文数を表示していることがわかります ...
問題は、なぜOrdersTotal()が-1ではなく、実際の 注文 数を表示するのか、このようにあるべきなのか、それとも何か新しい ことがあるのかです。
なぜなら、この場合、ゼロからではなく、イチから探すべきだからです
自分の間違いがわかったような気がします、すみません・・・。
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
鈍感ですみません、他のプログラムから文字列を取り出し、オフセットに注意を払いませんでした
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+