Решил отказаться от выражений типа iCustomer(... стал вставлять функции
в текст эксперта. Странная картина - некоторые функции работают.
Некоторые нет - неработают те функции которые я построил из
работающих ну например : Фновая = Фстарая1-Фстарая2. Подскажите
пожалуйста - я наверное что-то не так делаю. Буду благодарен
если вышлите пример на моё мыло : bertek@rambler.ru
- Миграция - Виртуальный хостинг для круглосуточной работы
- Как арендовать продукт - Маркет - магазин приложений
- Стилизатор - Разработка программ
Функции или индикаторы?
Itso:
Функции или индикаторы?
Функции или индикаторы?
у меня были индикаторы - на основе них я строил советника - но как я читал писать iCustom(...) - это дурной тон - поэтому тексты индикаторов оформил в виде функций в теле советника. Один из индикаторов - это разность двух других - так вот он и не работает - хотя каждый из его составляющих - работают нормально.
Недостаточно перенести код индикатора в эксперта. Не забывайте
о том, что большинство индикаторов написано с применением экономичных
перерасчетов. Да и нутро индикаторов сильно отличается от экспертов.
Например, в экспертах нет автоматических индексных массивов,
нет поддержки функции IndicatorCounted() для экономичного пересчета индикаторов и тд.
Необходимо вдумчиво переработать код индикатора для использования в эксперте. Если этого не сделать, то код индикатора в эксперте может работать в тысячи раз медленнее, чем штатный вызов через iCustom.
Необходимо вдумчиво переработать код индикатора для использования в эксперте. Если этого не сделать, то код индикатора в эксперте может работать в тысячи раз медленнее, чем штатный вызов через iCustom.
Привожу код советника
//+------------------------------------------------------------------+ //| BS003.mq4 | //| | //+------------------------------------------------------------------+ #define MAGICMA 20050610 extern int Lots = 1; extern int d = 60; extern double k = 1; extern string iname = "N00015"; extern int n = 0; extern double p = 15; //+------------------------------------------------------------------+ //| Определение открытых позиций | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;iOrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double n13_h,n13_l,sko,verge_up,verge_dw; double n18_h0,n18_l0,n18_m0,n18_h1,n18_l1,n18_m1; int res; //---- get Indicator Data n13_h=iCustom(NULL,0,"N00013",d,k,iname,2,0); n13_l=iCustom(NULL,0,"N00013",d,k,iname,1,0); sko=(n13_h-n13_l)/100*p; verge_up = sko; verge_dw = -sko; n18_h0=iCustom(NULL,0,"N00018",d,k,iname,1,0); n18_l0=iCustom(NULL,0,"N00018",d,k,iname,2,0); n18_m0=iCustom(NULL,0,"N00018",d,k,iname,0,0); n18_h1=iCustom(NULL,0,"N00018",d,k,iname,1,1); n18_l1=iCustom(NULL,0,"N00018",d,k,iname,2,1); n18_m1=iCustom(NULL,0,"N00018",d,k,iname,0,1); Print("n18_h1 = ",n18_h1," verge_up = ",verge_up); Print("n18_h0 = ",n18_h0," verge_up = ",verge_up); //---- buy conditions if (n18_h1verge_up && n18_h1>0 && n18_h0>verge_up) { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Green); return; } //---- sell conditions if (n18_l1>verge_dw && n18_l10 && n18_l0verge_dw) { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red); return; } //---- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double n13_h,n13_l,sko,verge_up,verge_dw; double n18_h0,n18_l0,n18_m0,n18_h1,n18_l1,n18_m1; int res; //---- get Indicator Data n13_h=iCustom(NULL,0,"N00013",d,k,iname,2,0); n13_l=iCustom(NULL,0,"N00013",d,k,iname,1,0); sko=(n13_h-n13_l)/100*p; verge_up = sko; verge_dw = -sko; n18_h0=iCustom(NULL,0,"N00018",d,k,iname,1,0); n18_l0=iCustom(NULL,0,"N00018",d,k,iname,2,0); n18_m0=iCustom(NULL,0,"N00018",d,k,iname,0,0); n18_h1=iCustom(NULL,0,"N00018",d,k,iname,1,1); n18_l1=iCustom(NULL,0,"N00018",d,k,iname,2,1); n18_m1=iCustom(NULL,0,"N00018",d,k,iname,0,1); //---- for(int i=0;iOrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //---- check order type if(OrderType()==OP_BUY) { //if ((fast_tekslow_tek && sdown_tek != EMPTY_VALUE)) if (n18_l1>verge_dw && n18_l10 && n18_l0verge_dw) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } if(OrderType()==OP_SELL) { //if ((fast_tek>slow_tek) ||(fast_tek if (n18_h1verge_up && n18_h1>0 && n18_h0>verge_up) OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); break; } } //---- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //---- } //+------------------------------------------------------------------+Данный советник работает нормально. Заменил функции
n13_h=iCustom(NULL,0,"N00013",d,k,iname,2,0); n13_l=iCustom(NULL,0,"N00013",d,k,iname,1,0);их ходами (из индикатора) - советник работает нормально.
Но как только заменяю коды
n18_h0=iCustom(NULL,0,"N00018",d,k,iname,1,0); n18_l0=iCustom(NULL,0,"N00018",d,k,iname,2,0); n18_m0=iCustom(NULL,0,"N00018",d,k,iname,0,0);на их исходники - эксперт перестаёт работать.
Подскажите как вставить в текст советника текст индикатора
.
Индикаторы очень простые - один цифровой фильтр, а другой похож на скользящую кауфмана - никаких наваротов в них нет - но когда я проверяю вычисления - он даёт на всём периоде один и тот же - одинаковый результат. Может я некоректно написал текст советника?
bertek:
Индикаторы очень простые - один цифровой фильтр, а другой похож на скользящую кауфмана - никаких наваротов в них нет - но когда я проверяю вычисления - он даёт на всём периоде один и тот же - одинаковый результат. Может я некоректно написал текст советника?
Индикаторы очень простые - один цифровой фильтр, а другой похож на скользящую кауфмана - никаких наваротов в них нет - но когда я проверяю вычисления - он даёт на всём периоде один и тот же - одинаковый результат. Может я некоректно написал текст советника?
Если скользящая кауфмана простой индикатор, то какой сложный? Вот его точно запаришься в эксперт переносить.
bertek:
Привожу код советника
Для вставки примеров исходного кода MQL4 используейте, пожалуйста, кнопку на панели инструментов редактора сообщений.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь