![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
leonid553 |
![]()
Сообщение
#191
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
|
leonid553 |
![]()
Сообщение
#192
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
to NoName:
Вот ещё идея подошла! Нет необходимости ограничивать число пар в советнике. Можно заложить в него 5-8 пар. Которые удовлетворительно работают по этой тактике. А число открытых ордеров при необходимости мы можем ограничить, если в условие открытия каждой пары добавим примерно вот такую конструкцию: Код if ExpertOrder (int VersionID)<=3 //если откр. позиций меньше 3-х { if (GBP) { //если ордеров по паре GBPUSD нет и "выключатель" включен { if (!ExpertOrder(MagicGBP)) { .... ... ... //----------------------------------------- bool ExpertOrder (int VersionID) Глянь на почту. |
leonid553 |
![]()
Сообщение
#193
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Решил проблему с библиотекой "b-lots".
Добавил пару строчек и ввел ограничение. Заложил в мультивалютную версию кроме классических и ещё одну - с вызовом индикатора I-Stoch_Env/ Но почему-то она не дает работать советнику. Хотя сама работает. Мешает вот этот блок: double Env__low[2]; //double Env__up [2]; //double Env__low_[2]; double Env__up_ [2]; double St[2]; Env__low[0]= iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,2,0); St[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,0,0); St[1] = iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,0,1); double St_[2]; Env__up_[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL , Env_deviation_SELL,1,1,0); St_[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL, Env_deviation_SELL,1,0,0); St_[1] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL, Env_deviation_SELL,1,0,1); |
leonid553 |
![]()
Сообщение
#194
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Немного подумал и решил что всё же грамотнее будет использовать библиотеку. Подправил для этой цели трал Игоря Кима. Подключить как обычно: #include <a-SimpleTrailingMod.mqh> Вызывать: TrailingPositions(Magic); В функцию нужно передавать Magic той позиции, которую нужно тралить. Запутался я в мультивалютке с тралами! В онлайне трал с грехом пополам работает по одной паре и печатает ошибку 2007.08.20 22:49:52 MULUTIE_v1 GBPUSD,M1: Error(130) modifying SL: Это - у меня на каждую пару свой трал. Но если я воспользуюсь твоей модиф. библиотекой, то что получается? Получается, что сразу по всем парам будут задаваться одинаковые значения Трейлинга? НО зачем нужна такая библиотека? Ведь каждая пара оптимизирована со своим значением трейлинга! Или я что-то не понял? |
Dimi |
![]()
Сообщение
#195
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Вот попробовал на скорую руку советника сделать по амкам, знающие люди Помогите, Hilfe, Help!!!!
![]() Код double CrossUp[]; double CrossDown[]; extern string AMkA1 ="Параметры 1 AMkA"; extern int periodAMA = 14; //период расчёта к-та эффективности extern double nfast = 2; //период EMA для эффективного рынка extern double nslow = 30; //период EMA для неэффективного рынка //---- расчёт сглаживающей константы extern double Pow = 2.0; //степень эффективности //---- фильтр сигналов extern double dK = 1.0; //коэффициент для фильтра extern bool use_stdev = true; //использовать стандартное отклонение //---- применять к цене extern int app_price = 5; //по умолчанию - к типической extern string AMkA2 ="Параметры 2 AMkA"; extern int periodAMA2 = 40; //период расчёта к-та эффективности extern double nfast = 2; //период EMA для эффективного рынка extern double nslow = 30; //период EMA для неэффективного рынка //---- расчёт сглаживающей константы extern double Pow = 2.0; //степень эффективности //---- фильтр сигналов extern double dK = 1.0; //коэффициент для фильтра extern bool use_stdev = true; //использовать стандартное отклонение //---- применять к цене extern int app_price = 5; //по умолчанию - к типической extern double Deviation1 = -0.01; extern double Deviation2 = -0.02; extern double Arrow_Delta1 = 1.5; extern double Arrow_Delta2 = 1.5; static int PrevBar = 0; //------------------- extern int TP=30; extern int SL=30; //extern double Lot=0.1; extern int Slippage=3; //------------------- int ticket; int MAGIC; color clModifyBuy = Green; color clModifySell = Blue; //-- Подключаемые модули -- #include <b-Lots.mqh> #include <a-SimpleTrailing.mqh> //--------------------------- //********************************************************************* //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- SetIndexLabel(2, "Fast_AMkA ("+nfast+")"); SetIndexLabel(3, "Slow_AMkA ("+nfast2+")"); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int limit, i, counter; double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter; double Range, AvgRange; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(i = 0; i <= limit; i++) { counter=i; Range=0; AvgRange=0; for (counter=i;counter<=i+9;counter++) { AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]); } Range=AvgRange/10; [b]fasterMAnow = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i); fasterMAprevious = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i+1); fasterMAafter = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i-1); slowerMAnow = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i); slowerMAprevious = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i+1); slowerMAafter = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i-1); //===== Ищем возможность войти в рынок ========================================================= int Orders=OrdersTotal (); //получаем кол-во открытых ордеров if (Orders==0) //если нет открытых ордеров { //---------проверяем условие на покупку---------------------------- if ((fasterMAnow > slowerMAnow) && (fasterMAprevious < slowerMAprevious) && (fasterMAafter > slowerMAafter) && (Time[0] != PrevBar)) {CrossUp[i] = MathMin(fasterMAnow,Low[i]) - Arrow_Delta1*Range*0.5; { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); } else { if (OrderSelect(ticket, SELECT_BY_TICKET) == true) { MAGIC=OrderMagicNumber(); } else { Print("Ошибка при выборе ордера BUY #", GetLastError() ); } } } //------------------------------------------------------------------ //--------проверяем условие на продажу------------------------------ if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > slowerMAprevious) && (fasterMAafter < slowerMAafter) && (Time[0] != PrevBar)) {CrossDown[i] = MathMax(fasterMAnow,High[i]) + Arrow_Delta2*Range*0.5; { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),1,Lots,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE); if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); } else { if (OrderSelect(ticket, SELECT_BY_TICKET) == true) { MAGIC=OrderMagicNumber(); } else {Print("Ошибка при выборе ордера SELL #", GetLastError() ); } } } //------------------------------------------------------------------ } //=============================================================================================== if (UseTrailing == true) TrailingPositions(); //---- return(0); } //+------------------------------------------------------------------+ Условие работы взял из индюка, который сигналит при пересечении Амок. Не знаю можно так или нельзя ![]() ![]() 'Pow' - variable already defined 'dK' - variable already defined 'use_stdev' - variable already defined в общем вот эти все nfast,nslow,Pow,dK,use_stdev,app_price и nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2, - variable already defined |
NoName |
![]()
Сообщение
#196
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Скажу сразу что в суть кода не вникал.
variable already defined - переменная уже определена То есть эти ошибки указывают на то что одна и та же переменная объявляется несколько раз. Этого делать нельзя. Переменная должна быть объявлена один при первом её упоминании в коде. P.S. Обрати внимание на то место где ты перечисляешь внешние параметры. extern string AMkA1 ="Параметры 1 AMkA"; extern int periodAMA = 14; //период расчёта к-та эффективности extern double nfast = 2; //период EMA для эффективного рынка extern double nslow = 30; //период EMA для неэффективного рынка //---- расчёт сглаживающей константы extern double Pow = 2.0; //степень эффективности //---- фильтр сигналов extern double dK = 1.0; //коэффициент для фильтра extern bool use_stdev = true; //использовать стандартное отклонение //---- применять к цене extern int app_price = 5; //по умолчанию - к типической extern string AMkA2 ="Параметры 2 AMkA"; extern int periodAMA2 = 40; //период расчёта к-та эффективности extern double nfast = 2; //период EMA для эффективного рынка extern double nslow = 30; //период EMA для неэффективного рынка //---- расчёт сглаживающей константы extern double Pow = 2.0; //степень эффективности //---- фильтр сигналов extern double dK = 1.0; //коэффициент для фильтра extern bool use_stdev = true; //использовать стандартное отклонение //---- применять к цене extern int app_price = 5; //по умолчанию - к типической Выделенные переменные должны иметь другое название. Например nfast2, nslow2 и т.д. |
leonid553 |
![]()
Сообщение
#197
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Dimi, возьми для начала одно - самое простое условие и заявляй для начала одну- две своих переменных. Не два десятка!
Разберись, чем отличаются double, int, bool а ТАКЖЕ - как правильно записать iCustom Что бы тебе не лазить по лекциям и путаным комментариям сделай так, как по рекомендации Hеlen-ы делал я когда - то: Например. Установи в метаэдиторе в меню русский язык. Далее в коде советника выдели мышкой интересующий тебя термин. Например iCustom. После чего смело нажимай клавишу F1 ! и ты получишь справку - что такое iCustom - в самом низу метаэдитора. И как им правильно пользоваться. ---------------------------------------------------------------------------------------------- NoName совершенно верно заметил. Ты одно название (например extern double nfast ) ЗАЯВЛЯВЛЯЕШЬ два раза! Во второй раз надо присвоить другое название. Т.к. это уже другая ЕМА |
leonid553 |
![]()
Сообщение
#198
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
но сначала вот что. В мт4 два типа индикаторов. Встроенные и пользовательские. Для того чтобы вызвать их в советник нужно по различному их вызывать.
Встроенные вызваются ( в разделе int start() ): double Stochastic_0=iStochastic(NULL, 0, Stochastic_period, 3,3,MODE_SMA,0,MODE_MAIN, 0); Пользовательские вызываются: double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) Для начала поясни - что ты хочешь сделать. Как использовать индикатор . Например , назови хотя бы одно из условий на вход и мы попробуем его реализовать в коде. |
Dimi |
![]()
Сообщение
#199
|
![]() Группа: Активный участник Сообщений: 236 Регистрация: 12.4.2006 Пользователь №: 14 Спасибо сказали: 2 раз(а) ![]() |
Дааа блин, как все запущенно.....
![]() |
leonid553 |
![]()
Сообщение
#200
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Параметры: symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ. timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика. name - Имя пользовательского индикатора. ... - Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора. mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад). Пример: double val=iCustom(NULL, 0, "SampleInd",13,1,0); ******************************************************* 'Это в справке так изложено. У тебя в коде значится: iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i); Остановимся для начала на периоде. Пусть у нас будет покупка когда Амка с малым периодом (быстрая) пересекает Амку с большим периодом (медленную) снизу вверх. Продажа - соответственно наоборот - сверху вниз. Таким образом во внешних параметрах советника будут заданы для начала эти периоды. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.5.2025, 21:08 |