void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Maksim Mihajlov: 你好,OrdersTotal()是怎么回事?我一直知道它包含 订单数-1,所以OrdersTotal()-1,一切都在工作,但我开始写一个程序,突然有一个订单没有被考虑进去,我问OrdersTotal(),它说订单总数=3,而不是3-1。 会发生什么?帮助中循环的通常形式:
int total=OrdersTotal(); for(int pos=0;pos<total; pos++) { }
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
我一直知道它包含订单数-1,即OrdersTotal()-1,一切都在工作,但我开始写一个程序,突然,一个订单不再被计算在内,我要求OrdersTotal(),它给我的订单总数=3,而不是3-1。
,发生了什么?
帮助中循环的通常形式:
int total=OrdersTotal();
for(int pos=0;pos<total; pos++)
{
}
也就是说,一阶等于零。
但不是,事实上,第一阶是1,这意味着我们应该从1开始搜索,而不是从0开始?
元引号是否做错了什么,还是我傻了?
你好,OrdersTotal()是怎么回事?我一直知道它包含
订单数-1,所以OrdersTotal()-1,一切都在工作,但我开始写一个程序,突然有一个订单没有被考虑进去,我问OrdersTotal(),它说订单总数=3,而不是3-1。 会发生什么?帮助中循环的通常形式:
int total=OrdersTotal();
for(int pos=0;pos<total; pos++)
{
}
也就是说,一阶等于零。
但不是,事实上,第一阶是1,这意味着我们应该从1开始搜索,而不是从0开始?
元引号是否做错了什么,还是我傻了?
你把 "相关指令 "和 "毒物 "弄混了。阅读参考资料。在你的问题中要更具体一些:你想计算的是什么:删除的订单还是职位?是的,没有任何变化--第一个元素索引以'0'开始。
新增: 示例
例子:计算头寸和挂单
你把相关的顺序和位置弄混了。阅读参考资料。更准确地提出你的问题:你想计算的是什么:退役军人还是职位?是的,没有任何变化--第一个元素索引以'0'开始。
新增: 示例
例子:计算头寸和挂单
我指的是MQL4,而不是MQL5,挂单和市价订单之间没有区别!
我指的是MQL4,而不是MQL5,没有划分为待定和市场待定!"。
你是在MQl5论坛上写的。你在主要部分写作。你在MQL5论坛发帖--你会得到关于MQL5的答案。
关于旧终端的问题,请到专门的章节:MQL4和MetaTrader 4。从现在开始,在那里写。我将把你的问题转发给它。
我比较了两个变体,在第一个变体中,我使用OrdersTotal()-1,并从0开始搜索--得到了错误
。在第二个变体中,我从1开始,并使用整个OrdersTotal()--这次没有错误。
在截图中,你可以看到OrdersTotal()显示的是实际订单数,而不是OrdersTotal()-1 ...
问题是,为什么OrdersTotal()显示的 是实际 订单数,而不是-1,应该是这样的,还是有什么新情况?
因为在这种情况下,我们不应该从零开始搜索,而应该从一开始搜索。
我比较了两个变体,在第一个变体中,我使用OrdersTotal()-1,并从0开始搜索--得到了错误
。在第二个变体中,我从1开始,使用整个OrdersTotal()--这次没有错误。
在截图中,你可以看到OrdersTotal()显示的是实际订单数,而不是OrdersTotal()-1 ...
问题是,为什么OrdersTotal()显示的 是实际 订单数,而不是-1,应该是这样的,还是有什么新情况?
因为在这种情况下,我们不应该从零开始搜索,而应该从一开始搜索。
我想我明白了我的错误,对不起......
在这个条件中,有一个-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); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+