- Как сделать чтоб один робот на одном счете работал одновременно на разных парах?
- Советник перезаходит после тейка или стопа, как исправить.
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
декомпил вне закона
Помогать разбираться с декомпилированными советниками вроде как нарушение этики.
Получается - подкладываешь свинью такому же как и ты
Скорее всего тут тебе не помогут
Здраствуйте. Написал код для советника. Не пойму почему не работает.
Тут просто алгоритм, пока не доработан, хотел сначала проверить его, правильно ли он работает, но при работе не выдаёт никаких сообщений, хотя по коду должен.
Помогите, пожалуйста, разобраться, я совсем новичёк в этом деле, а Вы, может, одним глазком, увидите ошибку.
//+------------------------------------------------------------------+ //| Дивер.mq4 | //| FOReignEXchange2008 | //| http://www.forexsignal.sk6.ru | //+------------------------------------------------------------------+ #property copyright "FOReignEXchange2008" #property link "http://www.forexsignal.sk6.ru" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ extern double X = 0.02; double AOmax1, //первый максимум индикатора AOmax2, //второй максимум индикатора max1, //первый максимум цены max2, //второй максимум цены AOmin1, //первый минимум индикатора AOmin2, //второй минимум индикатора min1, //первый минимум цены min2; //второй минимум цены int start() { //+----------------------------------------------------------------------------------------------+ //| Поиск максимумов индикатора и цены, нахождение медвежьей дивергенции | //+----------------------------------------------------------------------------------------------+ if (iAO(0,0,0)>X) //если индикатор выше нулевой линии, то выполняются два цикла { //+----------------------------------------------------------------------------------------------+ while (iAO(0,0,0) > X/4) //первый цикл-выполняется до тех пор пока индикатор { //не приблизился к нулевой линии if (iAO(0,0,0)>AOmax1) AOmax1=iAO(0,0,0); return; if (Bid>max1) max1=Bid; return; return; } Alert("AO=",AOmax1, " максимум1=", max1); //выводим на печать значения максимумов //+----------------------------------------------------------------------------------------------+ while (AOmax1>AOmax2 && (max1+5*Point)>max2 && iAO(0,0,0) > -X/2) //второй цикл-выполняется до тех пор, пока { //первые максимумы выше второго и индикатор //не на много опускается ниже нулевой линии if (iAO(0,0,0)>AOmax2) AOmax2=iAO(0,0,0); return; if (Bid>max2) max2=Bid; return; return; } Alert("AO=",AOmax2, " максимум2=", max2); //выводим на печать значения максимумов //+----------------------------------------------------------------------------------------------+ if (AOmax1>AOmax2 && max2>max1) //выводим на печать сообщение о дивергенции { Alert("Внимание, дивергенция!", "Максимум1=", max1, "Максимум2=", max2); OrderSend(Symbol(),OP_SELLLIMIT,0.1,max2+10*Point,3,max2+20*Point,max2-40*Point); return; } return; } //+----------------------------------------------------------------------------------------------+ //| Поиск минимумов индикатора и цены, нахождение бычьей дивергенции | //+----------------------------------------------------------------------------------------------+ if (iAO(0,0,0)< -X) //если индикатор ниже нулевой линии, то аналогично выполняются два цикла { //+----------------------------------------------------------------------------------------------+ while (iAO(0,0,0) < -X/4) { if (iAO(0,0,0)<AOmin1) AOmin1=iAO(0,0,0); return; if (Bid<min1) min1=Bid; return; return; } Alert("AO=",AOmin1, " минимум1=", min1); //+----------------------------------------------------------------------------------------------+ while (AOmin1<AOmin2 && (min1-5*Point)<min2 && iAO(0,0,0) < X/2) { if (iAO(0,0,0)<AOmin2) AOmin2=iAO(0,0,0); return; if (Bid<min2) min2=Bid; return; return; } Alert("AO=",AOmin2, " минимум2=", min2); //+----------------------------------------------------------------------------------------------+ if (AOmin1<AOmin2 && min2<min1) { Alert("Внимание, дивергенция!", "Минимум1=", min1, "Минимум2=", min2); OrderSend(Symbol(),OP_BUYLIMIT,0.1,min2-10*Point,3,min2-20*Point,min2+40*Point); return; } return; } //+----------------------------------------------------------------------------------------------+ }
Придется видно все-таки Вам учебник читать)
while (iAO(0,0,0) < -X/4) { if (iAO(0,0,0)<AOmin1) AOmin1=iAO(0,0,0); return; if (Bid<min1) min1=Bid; return; return; }
Блин, я даже не могу показать, что тут ошибка.... Вы представляете как вообще работает советник? Знаете что советник запускается каждый тик? Соответственно при каждом запуске советника, iAO(0,0,0) будет просто константой, а Вы тут такие циклы лепите. И вообще циклы while это не для новичка. Далее смысл двух return; подряд? Короче, тут все не в дугу, просто выкинуть, даже исправлять нечего.
Хотите добрый совет? Дивергенции и их поиск не самая простая задача. Для новичка может оказаться вообще неподъемной, просто бесцельно потратите время, и полностью разочаруетесь... Начните с написания самого простого эксперта, типа цена закрытия больше цены открытия бара покупаем, меньше продаем. Немечтайте о профите ближайшее время, не все "зубры" этого достигют. Посмотрите пример типичной программы в учебнике. Возьмите простенький эксперт и досконально разбирите его, что бы понять до последней запятой. Нахрапом написать, а уж тем более получить профит у Вас тут не получится. Ссылку на учебник я у Вам кажется уже давал (она вверху странице форума), есть еще очень хорошее чтиво написаное весьма просто 'Обзор статей Rosh'а: эксперты в MetaTrader 4' сам с него начинал.
Придется видно все-таки Вам учебник читать)
Блин, я даже не могу показать, что тут ошибка.... Вы представляете как вообще работает советник? Знаете что советник запускается каждый тик? Соответственно при каждом запуске советника, iAO(0,0,0) будет просто константой, а Вы тут такие циклы лепите. И вообще циклы while это не для новичка. Далее смысл двух return; подряд? Короче, тут все не в дугу, просто выкинуть, даже исправлять нечего.
Хотите добрый совет? Дивергенции и их поиск не самая простая задача. Для новичка может оказаться вообще неподъемной, просто бесцельно потратите время, и полностью разочаруетесь... Начните с написания самого простого эксперта, типа цена закрытия больше цены открытия бара покупаем, меньше продаем. Немечтайте о профите ближайшее время, не все "зубры" этого достигют. Посмотрите пример типичной программы в учебнике. Возьмите простенький эксперт и досконально разбирите его, что бы понять до последней запятой. Нахрапом написать, а уж тем более получить профит у Вас тут не получится. Ссылку на учебник я у Вам кажется уже давал (она вверху странице форума), есть еще очень хорошее чтиво написаное весьма просто 'Обзор статей Rosh'а: эксперты в MetaTrader 4' сам с него начинал.
Почему iAO(0,0,0) будет просто константой? Очень даже меняется...
А два return; подряд это конечно серьезнык косяк, в данном случае, радикально влияющий на профит.
Да, чё-та я понаставил return. Я думал он после каждого оператора ставится. Все убрал, оставил один в конце кода.
Попробую так
while (iAO(0,0,0) < -X/4) { if (iAO(0,0,0)<AOmin1) AOmin1=iAO(0,0,0); if (Bid<min1) min1=Bid; } Alert("AO=",AOmin1, " минимум1=", min1);
Подожду когда цикл кончится. Должно появится сообщение. Если появится, то поставлю на тест по всем парам на 5-ти минутках. К вечеру, думаю, будут первые результаты.
Спасибо за помощь!
Думаю, ещё счётчик поставить надо i ++; внутри цикла
Подожду когда цикл кончится. Должно появится сообщение. Если появится, то поставлю на тест по всем парам на 5-ти минутках. К вечеру, думаю, будут первые результаты.
Это пора в перлы заносить) Зачем что-то ждать? в iAO(0,0,0) последний параметр что??? Вписываете вместо него переменную и в цикле пробегаете по значениям индикатора.. Зачем спрашивать какой-то помощи если Вы ее полностью игнорируете? Ну да дело Ваше, кто-то из великих сказал "Если все будут умными, на их фоне легко самому показаться неучем...", наверно в чем-то он был прав...
В данном случае, это моя последняя попытка, перепечатаю Вам кусок справки по вызову этого индикатора, который помимо всего прочего говорит об ошибке в указании первого параметра вызоова индикатора:
Параметры:
Пример: double val=iAO(NULL, 0, 2); |

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования