0
205
Заметка 1 - сдвиг данных в массиве
Задача. Сдвинуть данные на 1 елемент назад. (6-ой станет 5-ым и т.д.)
ArrayCopy(buf,buf,0,1);
Сдвинуть на 1 вперёд.
ArrayCopy(buf,buf,1,0);
Заметка 2 - перебор всех символов в обзоре рынка
uint symbols_tot; string symbols[]; ////////////////////////////////////////////////////////////// int OnInit() { symbols_tot=SymbolsTotal(true); ArrayResize(symbols,symbols_tot); for(int i=0;i<symbols_tot;i++) { symbols[i]=SymbolName(i,true); } return(INIT_SUCCEEDED); } /////////////////////////////////////////////////////////////// void OnTick() { for(int i=0;i<symbols_tot;i++) { Alert("Symbol:"+symbols[i]); } }
Заметка 3 - преобразование типа переменной
Если вам надо например преобразовать тип переменной с datetime в string, то можно это сделать так
datetime time_cur=TimeCurrent(); Alert(TimeToString(time_cur));
А можно так
datetime time_cur=TimeCurrent(); Alert(string(time_cur));
Заметка 4 - открытие ордера(бинарные опционы)
Вся соль в коментарие к ордеру. Нужно записывать так
extern uint expiration_minits = 5; ... OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"BO exp:"+string(expiration_minits*60),Magic,0,clrNONE);
Заметка 5 - поиск цен уровней Фибоначчи
Сами цены уровней узнать нельзя. Только расчитать.
string name_fibo="Fibo"; int levels=int(ObjectGetInteger(0,name_fibo,OBJPROP_LEVELS)); double fib_prices[]; ArrayResize(fib_prices,levels); double price_lev0=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,1); double price_lev100=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,0); bool wayUP=false; if(price_lev0<price_lev100) wayUP=true; double perc100_points=MathAbs(price_lev0-price_lev100); double level=0; for(int i=0;i<levels;i++) { level=ObjectGetDouble(0,name_fibo,OBJPROP_LEVELVALUE,i); if(wayUP) fib_prices[i]=price_lev0+perc100_points*level; else fib_prices[i]=price_lev0-perc100_points*level; }
Заметка 6 - нажатие кнопки
OnChartEvent() в тестере не работает. Но одно универсальное решение для нажатия кнопки в тестере и живой торговли есть.
if(ObjectGetInteger(0,"BUY_button",OBJPROP_STATE)) { ObjectSetInteger(0,"BUY_button",OBJPROP_STATE,false); ... }
Заметка 7 - обрезание символов в цене инструмента
Подходит только к цене. Если что то другое, то надо вместо Digits писать число которое ровно количеству символов дроби.
extern ushort Characters_delete = 1; /////////////////////////////////////////// string data=DoubleToString(Bid,Digits); string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete);
Заметка 8 - разделение строки на элементы
Например нам нужно разделить строку с лотами и поместить их в буфер.
extern string Lots="0.01,0.03,0,06"; ... string str_spl[]; int size=StringSplit(Lots,StringGetCharacter(",",0),str_spl); ArrayResize(lots_buf,size); for(int i=0;i<size;i++) { lots_buf[i]=double(str_spl[i]); }
Заметка 9 - определение первого тика на новой свече(работа раз на баре)
Так и только так надо определять приход нового бара. Многие используют Time[0], но он не будет работать правильно если вы переключите на необновленный график или включите терминал после простоя.
int prevbars; ... if(Bars==prevbars) return; prevbars=Bars;