serg-box 0 Share Posted October 23, 2008 To serg: Спасибо, понял. Quote Link to post Share on other sites
Yudjin78 9 Share Posted October 27, 2008 Кирилл или SHU помогите. Написал экспа по аналогу из учебника Ковалева, работает по принципу открытие по времени и текущему состоянию рынка, но сделок не совершает, сцука.Для определения тренда использую FX_FISH, но можно использоать любой трендовый. Подскажите где может быть ошибка. Timetrend2.mq4 Quote Link to post Share on other sites
lukas1 4 Share Posted October 28, 2008 Кирилл или SHU помогите.Написал экспа по аналогу из учебника Ковалева, работает по принципу открытие по времени и текущему состоянию рынка, но сделок не совершает, сцука.Для определения тренда использую FX_FISH, но можно использоать любой трендовый. Подскажите где может быть ошибка. Безо всякого условия к Total плюсуешь единицу. Потом пишешь, что если Total>0, то - выход. Вот поэтому и не работает. Quote Link to post Share on other sites
Yudjin78 9 Share Posted October 28, 2008 Безо всякого условия к Total плюсуешь единицу. Потом пишешь, что если Total>0, то - выход. Вот поэтому и не работает. Благодарю за ответ на просьбу просмотреть советника. Привожу цитату из учебника Ковалева: Учёт ордеров Рассматриваемый эксперт предполагает возможность работы только с одним рыночным ордером. Задачей блока учёта ордеров (блок 4-5) является определение характеристик открытого ордера, если такой ордер есть. В цикле перебора ордеров for опрашиваются все имеющиеся рыночные и отложенные ордера, а именно от первого (int i=1) до последнего (i<=OrdersTotal()). На каждой итерации этого цикла с помощью функции OrderSelect() выбирается очередной ордер. Выбор производится из источника открытых и отложенных ордеров (SELECT_BY_POS). if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий Если этот выбор удалось выполнить успешно (т.е. если в терминале есть очередной ордер), то в дальнейшем и этот ордер и сложившуюся ситуацию необходимо исследовать: открыт ли выбранный ордер по финансовому инструменту, по которому работает эксперт, является ли ордер рыночным или отложенным, а также учесть его при подсчёте ордеров. В строке: if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм отсеиваются все ордера, открытые по какому-либо другому финансовому инструменту. Оператор continue заканчивает текущую итерацию, в результате чего характеристики этого ордера не обрабатываются. Если же ордер открыт по тому финансовому инструменту, в окно которого присоединён эксперт, он подвергается следующей проверке. Если функция OrderType() возвращает значение больше 1 (см. Типы торговых операций), то выбранный ордер - отложенный. Но в данном эксперте не предусмотрено управление отложенными ордерами. Это значит, что необходимо закончить исполнение специальной функции start(), т.к. сложилась конфликтная ситуация. В этом случае после сообщения об окончании работы исполнение функции start() заканчивается с помощью оператора return. Если последняя проверка показала, что исследуемый ордер рыночный, то производится подсчёт и анализ общего количества ордеров, открытых по финансовому инструменту. Для первого из таких ордеров определяются все необходимые характеристики. Если же на очередной итерации счётчик ордеров (переменная Total ) зафиксирует второй рыночный ордер, то такая ситуация также расценивается как конфликтная, т.к. эксперт не предназначен для управления более, чем одним рыночным ордером. В этом случае исполнение специальной функции start() после уведомления пользователя заканчивается. В результате исполнения блока учёта ордеров (если все проверки прошли успешно) переменная Total сохраняет своё значение нулевым, если рыночных ордеров нет, или получает значение 1, если по нашему финансовому инструменту имеется рыночный ордер. В последнем случае ряд переменных, поставленных в соответствие характеристикам ордера (номер, тип, цена открытия, значения стоп-приказов и стоимость ордера), тоже получают свои значения. Насколько я понял условие все же есть: if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий Если можно обьясните. Quote Link to post Share on other sites
Yudjin78 9 Share Posted October 30, 2008 Программеры или думают, или игнорируют вопрос. Quote Link to post Share on other sites
Dmtr 0 Share Posted October 30, 2008 Ребята, есть в MQL один неприятный баг. Появляется, если есть цикл в цикле. Например (пишу на память дабы отразить смысл, код не отражает действительности) void PrintOrders() { int pos; int total = OrdersTotal(); for(pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; if(!IsPositiveOrder()) continue; Print(OrderComment()); } } bool IsPositiveOrder() { int pos; int total = OrdersTotal(); for(pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue; if(OrderProfit() > 0) return(true); } return(false); } Так вот, в этом куске, в функции PrintOrders(), после вызова IsPositiveOrders() указатель уходит на последний ордер и цикл теряет смысл. Quote Link to post Share on other sites
Shu 0 Share Posted October 30, 2008 Ребята, есть в MQL один неприятный баг. Появляется, если есть цикл в цикле. а что должна вообще делать функция IsPositiveOrder() ? Quote люблю пиво, стреляю, пишу советники Link to post Share on other sites
~~SOM~~ 1 Share Posted October 30, 2008 а что должна вообще делать функция IsPositiveOrder() ? Ну видимо, определять прибыльную сделку. Quote Link to post Share on other sites
ЖАБА77 1,853 Share Posted October 30, 2008 вопрос не в тему .. звиняйте! там игры в инете есть - пишут - пришла смс на номер ... вопрос - сколько денеК берут за игру одну на mail/ru/?? спасибо! Quote Покупаю лоссы -Дарю профиты) Ква! Link to post Share on other sites
Roger 18 Share Posted October 30, 2008 Ребята, есть в MQL один неприятный баг. Появляется, если есть цикл в цикле. Все просто, у Вас переменные цикла с одним именем. Поставьте в одном pos в другом - pos1 и все устаканится. Quote Link to post Share on other sites
Оптимист 0 Share Posted October 30, 2008 Здравствуйте!Начал изучать "Уроки" и сразу возникли вопросы Если в коде индикатора dHigh = High[pos]; dLow = Low[pos]; dResult = dHigh / dLow; //dResult = dHigh - dLow; ExtMapBuffer1[pos]= dResult ; ставить знак деления, то компилируется нормально, но отрисовывает только три последних бара. Что бы это значило? Рискну повторить свой вопрос. А вдруг кто-нибудь ответит? Quote Век живи - век учись... Link to post Share on other sites
ЖАБА77 1,853 Share Posted October 30, 2008 и что? спасибо за не ответ( так вот , за игру примерно 150 рЭ .. с моего телефона свистнули1000 рЭ))) Quote Покупаю лоссы -Дарю профиты) Ква! Link to post Share on other sites
alex1978 43 Share Posted October 30, 2008 и что? спасибо за не ответ( так вот , за игру примерно 150 рЭ .. с моего телефона свистнули1000 рЭ))) Так не нужно держать на телефоне больше 150 рэ Quote Link to post Share on other sites
Programmer 33 Author Share Posted October 30, 2008 To Yudjin78: Программеры или думают, или игнорируют вопрос. У Вас код 250 строк. Сходу ошибку не видно. Никто не будет сидеть и разбираться с Вашим кодом. Попробуйте сами или начните изучение программирования с программ полегче. Quote Link to post Share on other sites
Raffael_X 0 Share Posted October 30, 2008 Привет всем! Кто-нибудь может сделать чтоб бар окрашивался в цвет которому равен по MFI Билла? Quote Link to post Share on other sites
Yudjin78 9 Share Posted October 31, 2008 To Yudjin78: У Вас код 250 строк. Сходу ошибку не видно. Никто не будет сидеть и разбираться с Вашим кодом. Попробуйте сами или начните изучение программирования с программ полегче. Спасибо, что взглянули. Вобще весь код я думаю можно не смотреть, посмотрите если можно части 4, 5, 6 //--------------------------------------------------------------- 4 -- // Учёт ордеров Symb=Symbol(); // Название фин.инстр. Total=0; // Количество ордеров for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий { // Анализ ордеров: if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм if (OrderType()>1) // Попался отложенный { Alert("Обнаружен отложенный ордер. Эксперт не работает."); return; // Выход из start() } Total++; // Счётчик рыночн. орд if (Total>1) // Не более одного орд { Alert("Несколько рыночных ордеров. Эксперт не работает."); return; // Выход из start() } Ticket=OrderTicket(); // Номер выбранн. орд. Price =OrderOpenPrice(); // Цена выбранн. орд. SL =OrderStopLoss(); // SL выбранного орд. TP =OrderTakeProfit(); // TP выбранного орд. Lot =OrderLots(); // Количество лотов } } //--------------------------------------------------------------- 5 -- // Торговые критерии для моей системы double TrendFish=iCustom(NULL,0,"FX_FISH",period,price,Mode_Fast,Signals,0,1); //----+ ОПРЕДЕЛЕНИЕ СИГНАЛОВ ДЛЯ СДЕЛОК BUY if (Hour() == TradeHour) //Если час торговли равен текущему if (Minute() == TradeMinute) //Если минута торговли равна текущей if (TrendFish >= PorogUp) //Если значения индикатора > или = порогу для BUY { Opn_B=true; // Критерий откр. Buy } //----+ ОПРЕДЕЛЕНИЕ СИГНАЛОВ ДЛЯ СДЕЛОК SELL if (Hour() == TradeHour) //Если час торговли равен текущему if (Minute() == TradeMinute) //Если минута торговли равна текущей if (TrendFish <= PorogDown) //Если значения индикатора < или = порогу для SELL { Opn_S=true; // Критерий откр. Sell } // Торговые критерии--------------------------------------------------------------- 6 -- // Закрытие ордеров while(true) // Цикл закрытия орд. { if (Fun_Error(GetLastError())==1) // Обработка ошибок continue; // Повторная попытка return; // Выход из start() break; // Выход из while } 4 часть , чтобы подтвердить или опровергнуть мысль Lukas1, что ошибка там.А части 5 и 6 это уже я писал, поэтому считаю, что ошибка там. Особенно посмотрите 6 раздел т.к. код для момента закрытия именно по ТП и СЛ без тралов или критериев закрытия не нашел. Quote Link to post Share on other sites
Yudjin78 9 Share Posted October 31, 2008 И еще вопрос скажите, если мне нужно только протестировать стратегию на тестере, какие части в советнике не нужны? И еще по торговле одним лотом, я думаю если этот блок убрать, т.к сделки совершаются раз в сутки, то накладок не будет. Quote Link to post Share on other sites
Dmtr 0 Share Posted October 31, 2008 Все просто, у Вас переменные цикла с одним именем. Поставьте в одном pos в другом - pos1 и все устаканится. Roger, огромное спасибо!!! Мне бы и в голову не пришло что в разных функциях одна и та же локальная переменная - глобальна. Буду пробовать )) Quote Link to post Share on other sites
Shu 0 Share Posted October 31, 2008 Все просто, у Вас переменные цикла с одним именем. Поставьте в одном pos в другом - pos1 и все устаканится. локальные переменные по барабану! Quote люблю пиво, стреляю, пишу советники Link to post Share on other sites
Shu 0 Share Posted October 31, 2008 Ну видимо, определять прибыльную сделку. если прибыльную сделку - совершенно непонятно зачем это делать через вызов функции своей отдельной.. наверное, там что-то более мудрёное. Quote люблю пиво, стреляю, пишу советники Link to post Share on other sites
~~SOM~~ 1 Share Posted October 31, 2008 если прибыльную сделку - совершенно непонятно зачем это делать через вызов функции своей отдельной.. наверное, там что-то более мудрёное. Он там вначале написал, что это типа просто пример, показать что не работает, и все. Quote Link to post Share on other sites
ЖАБА77 1,853 Share Posted October 31, 2008 мой счет на 10 000 $ откр по 0.1 хочу открыть микро рубли в альпари... открыт поз по 0.01 вопрос - что бы повторить депозит 10 000$ только на микро сколько рублей надо у меня получается 1 000 $ что примерно 30 000 руб прально? или не прально? спасибо . Quote Покупаю лоссы -Дарю профиты) Ква! Link to post Share on other sites
~~SOM~~ 1 Share Posted October 31, 2008 Правильно, $1000 по курсу Альпари. Quote Link to post Share on other sites
ЖАБА77 1,853 Share Posted October 31, 2008 Правильно, $1000 по курсу Альпари. ок) спасибо! Quote Покупаю лоссы -Дарю профиты) Ква! Link to post Share on other sites
Samyel 0 Share Posted November 2, 2008 Скажите пожалуйста,как можно заставить сотрудничатьMQL одного терминала с MQL другого терминала(разные сервера и счета) в режиме on-line,или чтo бы MQL одного терминала могла видеть котировки другого терминала в онлайне? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.