Всех приветствую.У меня проблема-"потерял" индикатор.Это какой-то сглаженный CCI,у которого можно было изменять два параметра-период и какой-то множитель.В оригинальном варианте эти параметры были равны соответственно 20 и 2.И,если я всё правильно помню,название этого индикатора состояло из двух слов и второе слово начиналось с английской буквы "С".Вдруг кто знает,помогите!
Но в целом, конечно, можно перегрузить и конструктор и использовать его вместо Init(), в конце концов, это такая же функция. На какой вариант фапать - это личное дело каждого, в вопросах вкуса, как известно, советчиков нет)
А если инициализация не удалась, то в случае использования метода, например, Init(), можно его описать возвращающим значение соответствующего типа и вернуть в случае ошибки соответствующее значение. Вызывающий код, таким образом, узнает о неудавшейся инициализации, и о том, что объект поэтому использовать нельзя. Как вызывающий код узнает о неудавшейся инициализации в случае использования конструктора?
Ребзя хелп , как заставить сова не открывать ордер на том же баре что и была позиция открыта ранее по сигналу , а ждал новый бар и снова проверка сигнала , делал типо так - побарно
добавлял это -
datetime BARflag = 0;
и -
int start()
{
datetime now = Time[0];
if(BARflag >= now) return(0);
BARflag = now;
Ребзя хелп , как заставить сова не открывать ордер на том же баре что и была позиция открыта ранее по сигналу , а ждал новый бар и снова проверка сигнала , делал типо так - побарно
добавлял это -
и -
Как-то так:
//---if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
// выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
}
else {
// выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
}
Спасибо , не усложнит расшифровать прописанные строчки для примера ?--//выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
// выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий ...???
Спасибо , не усложнит расшифровать прописанные строчки для примера ?--//выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
// выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий ...???
//+------------------------------------------------------------------+int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
datetime t=0;
int i, j=-1, k=OrdersTotal()-1;
for (i=k; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS)) {
if (OrderSymbol()!=sy) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()!=mn) continue;
if (t<OrderOpenTime()) {
t=OrderOpenTime();
j=i;
}
}
}
if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
return(-1);
}
//+------------------------------------------------------------------+
Если функция возвращает -1, значит нет открытой позиции, данные которой переданы в функцию.
Пример использования:
if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
// бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, // с магиком magic больше нулевого --> можно открывать следующую позицию
}
или
if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
// нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
}
почему в Buf1 отличные значения от Buf0? по логике вещей они должны быть одинаковы?
почему через переменную одни значения, а через буфер (масив данных)--> (масив требуется для дальнешего расчета) другие значения? как через масив сделать также как и через переменные м1 и м2
почему в Buf1 отличные значения от Buf0? по логике вещей они должны быть одинаковы?
почему через переменную одни значения, а через буфер (масив данных)--> (масив требуется для дальнешего расчета) другие значения? как через масив сделать также как и через переменные м1 и м2
а зачем нужны два буфера с одинаковыми значениями???
надо в старт добавить
ArrayInitialize(t1,0);
ArrayInitialize(t2,0);
тогда хотя бы значения буферов будут одного порядка, хотя и не равны
Люди добрые, помогите, пожалуйста. Сайт (возможно, мой комп.) меня "банит" с завидной периодичностью раз в 2-3 дня на 3-5 часов, по всем признакам, "бан" ложный, а затем "разбанивает", как ни в чем не бывало. В чем может быть причина?
Есть индикатор MA. А есть ему подобный HMA. Как его можно вставить в советник? Полностью копировать код? Или есть более укороченный вариант?
Всех приветствую.У меня проблема-"потерял" индикатор.Это какой-то сглаженный CCI,у которого можно было изменять два параметра-период и какой-то множитель.В оригинальном варианте эти параметры были равны соответственно 20 и 2.И,если я всё правильно помню,название этого индикатора состояло из двух слов и второе слово начиналось с английской буквы "С".Вдруг кто знает,помогите!
Но в целом, конечно, можно перегрузить и конструктор и использовать его вместо Init(), в конце концов, это такая же функция. На какой вариант фапать - это личное дело каждого, в вопросах вкуса, как известно, советчиков нет)
А если инициализация не удалась, то в случае использования метода, например, Init(), можно его описать возвращающим значение соответствующего типа и вернуть в случае ошибки соответствующее значение. Вызывающий код, таким образом, узнает о неудавшейся инициализации, и о том, что объект поэтому использовать нельзя. Как вызывающий код узнает о неудавшейся инициализации в случае использования конструктора?
Ребзя хелп , как заставить сова не открывать ордер на том же баре что и была позиция открыта ранее по сигналу , а ждал новый бар и снова проверка сигнала , делал типо так - побарно
добавлял это -
и -Ребзя хелп , как заставить сова не открывать ордер на том же баре что и была позиция открыта ранее по сигналу , а ждал новый бар и снова проверка сигнала , делал типо так - побарно
добавлял это -
и -Как-то так:
Как-то так:
Спасибо , не усложнит расшифровать прописанные строчки для примера ?--//выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
// выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий ...???
Спасибо , не усложнит расшифровать прописанные строчки для примера ?--//выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
// выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий ...???
Вот функция, возвращающая бар открытия последней открытой позиции:
Если функция возвращает -1, значит нет открытой позиции, данные которой переданы в функцию.
Пример использования:
или
Знатоки прошу у Вас помощи...
алгоритм test01
//+------------------------------------------------------------------+ //test //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGold #property indicator_color2 clrBlue #property indicator_level1 0 //--- indicator buffers double Buf0[]; double Buf1[]; double t1[]; double t2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(4); SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,t1); SetIndexBuffer(3,t2); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,counted_bars; counted_bars=IndicatorCounted(); i=Bars-counted_bars-1; int sr=24,n; double sum,sum2; double m1,m2; while(i>=0) { sum=0; sum2=0; for(n=i; n<=i+sr-1; n++) { if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n]; if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n]; if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n]; if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n]; } Buf0[i]=(m1+m2)/sr; Buf1[i]=(t1[i]+t2[i])/sr; i--; } return(0); } //+------------------------------------------------------------------+почему в Buf1 отличные значения от Buf0? по логике вещей они должны быть одинаковы?
почему через переменную одни значения, а через буфер (масив данных)--> (масив требуется для дальнешего расчета) другие значения? как через масив сделать также как и через переменные м1 и м2
Знатоки прошу у Вас помощи...
алгоритм test01
почему в Buf1 отличные значения от Buf0? по логике вещей они должны быть одинаковы?
почему через переменную одни значения, а через буфер (масив данных)--> (масив требуется для дальнешего расчета) другие значения? как через масив сделать также как и через переменные м1 и м2
а зачем нужны два буфера с одинаковыми значениями???
надо в старт добавить
тогда хотя бы значения буферов будут одного порядка, хотя и не равны