Ответить
16.12.2014, 21:14
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Вот про это я и говорю. Условие if(MA1>MA2) это буквально тело импульса то есть 1. Передний фронт это: переход от 0 к 1. То есть момент пересечения МА.
По простому это будет:
OnTick()
{
static double LastMA1, LastMA2;
double MA1, MA2;
MA1=iMA(...);
MA2=iMA(...);
//Инициализация прошлого значения
if(LastMA1<0.0000001 || LastMA2<0.0000001)
{
LastMA1=MA1;
LastMA2=MA2;
}
//Если был 0, а стала 1 и количество ордеров не достигло максимального.
if(LastMA1<=LastMA2 && MA1>MA2 && OrdersTotal() < MaxOrders)
{
OrderSend(...);
}
LastMA1=MA1;
LastMA2=MA2;
}}
при каждом новом переднем фронте будет открываться ордер. это будет нормально работать в тестере. Для надёжной работы в реальных условиях, нужно добавить ооооочень много "лишнего" кода.
спасибо за ответ! правда не верится что нельзя проще и короче...вапще удивляет, когда программисты с опытом пишут простую логику очень сложно, а кто имеет мало опыта, проще намного...хотя помню как в школе по математике была контрольная, с простыми заданиями, так вот все отличники думали и решали сложно, поэтому еле сдали на 3ки, те же кто учился на 3ки - написали на 4 и 5, просто отличники не смогли переключить мышление на простое...
а как на счет такого кода, случайно нашел по кодам...будет он работать как надо?

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < 1)
  {
//---------------------

   
if(MA1>MA2)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 16.12.2014 в 21:19.
16.12.2014, 21:26
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,599 раз(а) / Репутация: 2596
мое имхо
тригер=2
при выполнеии условия если if(.....и ( тригер!=1)
выполнили тригер=1
второеусловие если .....if(тригер=0( тригер!=0)
выполнили тригер=0
и все)))
Ты не старайся, и у тебя всё получится.
Milord 
17.12.2014, 02:58
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
мое имхо
тригер=2
при выполнеии условия если if(.....и ( тригер!=1)
выполнили тригер=1
второеусловие если .....if(тригер=0( тригер!=0)
выполнили тригер=0
и все)))
спасибо за ответ!
поскольку даже 1 знак неверно написанный в коде меняет логику выполнения программы,не могли бы вы показать на моем примере ваш вариант???

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(MA1>MA2)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
17.12.2014, 16:04
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

По умолчанию Как найти проблему?!

Все здравствуйте! Написал советника, а он, собака, виснет. Виснет, я так полагаю, одна функция. Суть в том, что у него несколько режимов работы. В штатном режиме все функционирует прекрасно, когда ситуация становится критической, активируется режим спасения. Переключение тоже проходит безупречно. А вот этот самый режим спасения начинает работать, открывает несколько ордеров и быстро зависает. То есть терминал вроде работает, котировки поступают, но советник ордера не открывает. Пытаюсь снять его с графика, терминал зависает наглухо, закрываю его только Завершением задачи. При перезагрузке запускаю спасение вручную, или оно активируется автоматом - происходит то же самое, несколько ордеров и заклинивает. Подскажите, пожалуйста, как, собственно, искать ошибку? Или лучше с маху переписать всю эту функцию?
17.12.2014, 16:39
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Все здравствуйте! Написал советника, а он, собака, виснет. Виснет, я так полагаю, одна функция. Суть в том, что у него несколько режимов работы. В штатном режиме все функционирует прекрасно, когда ситуация становится критической, активируется режим спасения. Переключение тоже проходит безупречно. А вот этот самый режим спасения начинает работать, открывает несколько ордеров и быстро зависает. То есть терминал вроде работает, котировки поступают, но советник ордера не открывает. Пытаюсь снять его с графика, терминал зависает наглухо, закрываю его только Завершением задачи. При перезагрузке запускаю спасение вручную, или оно активируется автоматом - происходит то же самое, несколько ордеров и заклинивает. Подскажите, пожалуйста, как, собственно, искать ошибку? Или лучше с маху переписать всю эту функцию?
обычно зависания связаны с зацикливанием или сном. Если он выполняет Sleep(60000); то минуту советник не открывает свойства, не удаляется и вообще ничего не делает. Нужно дождаться когда проснётся.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
17.12.2014, 17:05
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
обычно зависания связаны с зацикливанием или сном. Если он выполняет Sleep(60000); то минуту советник не открывает свойства, не удаляется и вообще ничего не делает. Нужно дождаться когда проснётся.
Вообще функция зациклена, но зависания происходят, когда условия цикла все еще актуальны. Я сейчас повтыкал на каждом шагу алерты, чтобы видеть, на каком шаге зависает функция. выяснил, что две внешние функции, которые высчитывают значения для этой самой проблемной функции выполняются по много раз в секунду. Периодически процессор грузится на 95-97%. В эти моменты происходит зависание. Если я правильно понял, это как раз от этих высчетов каждую секунду? Правильно ли тогда поставить после каждого открытия ордера Sleep примерно на секунду?

Последний раз редактировалось Alexz2107; 17.12.2014 в 17:07.
17.12.2014, 17:40
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
обычно зависания связаны с зацикливанием или сном. Если он выполняет Sleep(60000); то минуту советник не открывает свойства, не удаляется и вообще ничего не делает. Нужно дождаться когда проснётся.
Вы правы, зависание происходило, судя по всему из-за зацикливания. Поставил Sleep(1000), высчеты шли раз в секунду, но зависало все равно. Поставил выход из цикла, стало работать корректно. Но теперь ордера открываются только по поступлении тика, выходит очень медленно. А желательно бы организовать выполнение цикла, не дожидаясь новых тиков. Можно ли так выполнить цикл? Там принцип такой:
ФУНКЦИЯ()
а=ФУНКЦИЯ1();
б=ФУНКЦИЯ2();
цикл(а>б)
ФУНКЦИЯ3(в,г)
Хотелось бы, чтобы ФУНКЦИЯ как раз была зациклена и выполнялась, пока условия не станут ложными.
17.12.2014, 18:58
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Вы правы, зависание происходило, судя по всему из-за зацикливания. Поставил Sleep(1000), высчеты шли раз в секунду, но зависало все равно. Поставил выход из цикла, стало работать корректно. Но теперь ордера открываются только по поступлении тика, выходит очень медленно. А желательно бы организовать выполнение цикла, не дожидаясь новых тиков. Можно ли так выполнить цикл? Там принцип такой:
ФУНКЦИЯ()
а=ФУНКЦИЯ1();
б=ФУНКЦИЯ2();
цикл(а>б)
ФУНКЦИЯ3(в,г)
Хотелось бы, чтобы ФУНКЦИЯ как раз была зациклена и выполнялась, пока условия не станут ложными.
2 варианта:
1. Этот будет работать в тестере, но может не помочь. Засунуть в цикл сон на 0.1 секунду.
Во время сна, советник не работает, но и не грузит процессор.
цикл(а>б)
{
действия в цикле
Sleep(100);
}
2. задействовать системный таймер вместо цикла. Инициализировать его на 0.1 секунды. Этот вариант почти не грузит процессор, но в тестере не будет работать, так как он не умеет моделировать таймер.

Ну или продумать алгоритм так что бы избежать зависания. Может продумать заново и переписать функцию с циклом.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
18.12.2014, 06:22
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Ну или продумать алгоритм так что бы избежать зависания. Может продумать заново и переписать функцию с циклом.
Как вариант для нормального снятия советника с чарта можно использовать IsStopped в цикле.
Код:
if(IsStopped()) break; // из цикла
18.12.2014, 15:03
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
2 варианта:
1. Этот будет работать в тестере, но может не помочь. Засунуть в цикл сон на 0.1 секунду.
Во время сна, советник не работает, но и не грузит процессор.
цикл(а>б)
{
действия в цикле
Sleep(100);
}
2. задействовать системный таймер вместо цикла. Инициализировать его на 0.1 секунды. Этот вариант почти не грузит процессор, но в тестере не будет работать, так как он не умеет моделировать таймер.

Ну или продумать алгоритм так что бы избежать зависания. Может продумать заново и переписать функцию с циклом.
Первый вариант вешается. А по поводу второго подробнее можно? Я еще с ним не сталкивался.
18.12.2014, 15:15
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Как вариант для нормального снятия советника с чарта можно использовать IsStopped в цикле.
Код:
if(IsStopped()) break; // из цикла
Да дело-то не в снятии. Я вчера доработал функцию, вроде бы все работает идеально, и не виснет, и процессор не грузит, и снимается легко и непринужденно. Чисто технически к советнику сейчас претензий нет. Хотелось бы именно ускорить работу цикла. Функция IsStopped() работает только для снятия с чарта или можно использовать в любой функции?
18.12.2014, 16:06
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Да дело-то не в снятии. Я вчера доработал функцию, вроде бы все работает идеально, и не виснет, и процессор не грузит, и снимается легко и непринужденно. Чисто технически к советнику сейчас претензий нет. Хотелось бы именно ускорить работу цикла. Функция IsStopped() работает только для снятия с чарта или можно использовать в любой функции?
Я посоветовал как вариант снятия советника для дальнейшей правки кода без перезагрузки терминала. А по логике IsStoped() должна работать при любой остановке советника. Будь то отжатие кнопки или просто закрытие терминала. Тоесть прекращает выполнение и переходит в деинит.
18.12.2014, 16:21
Аватар для Alexz2107
Alexz2107 Alexz2107 вне форума Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Я посоветовал как вариант снятия советника для дальнейшей правки кода без перезагрузки терминала. А по логике IsStoped() должна работать при любой остановке советника. Будь то отжатие кнопки или просто закрытие терминала. Тоесть прекращает выполнение и переходит в деинит.
Жаль, тогда мне это и ни к чему. Я думал, это что-то сродни break.
18.12.2014, 17:13
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Первый вариант вешается. А по поводу второго подробнее можно? Я еще с ним не сталкивался.
Цитата:
//Сначала инициализировать таймер
int OnInit()
{
//---
EventSetMillisecondTimer(100);
//---
return(INIT_SUCCEEDED);
}

//Дальше функция таймера выполняется как цикл, примерно 10 раз в секунду, так как при инициализации было задано 100ms.
void OnTimer()
{

}
Думаю, не надо объяснять как использовать переменные на глобальном уровне для передачи команд в в функцию таймера и как передать результат выполнения обратно.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.12.2014, 01:40
Аватар для Gnn-life
Gnn-life Gnn-life вне форума Элитный участник
Регистрация: 09.04.2012 / Адрес: Питер / Сообщений: 515
Поблагодарили 1,042 раз(а) / Репутация: 1042
Уважаемые прогеры...или начинающие, вобщем вопрос? как вставить в советник индикатор i-custom (весь код), дальше разберусь (наверно)...извините учусь....

Последний раз редактировалось Gnn-life; 19.12.2014 в 01:42.
19.12.2014, 05:41
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Уважаемые прогеры...или начинающие, вобщем вопрос? как вставить в советник индикатор i-custom(весь код), дальше разберусь (наверно)...извините учусь....
А в документации разве не весь код? _http://docs.mql4.com/ru/indicators/icustom
19.12.2014, 14:52
Аватар для Vik940
Vik940 Vik940 на форуме Почётный гражданин
Регистрация: 26.05.2012 / Сообщений: 138
Поблагодарили 339 раз(а) / Репутация: 340
Уважаемые знатоки подскажите пожалуйста существует ли фукция или код автоматической загрузки параметров советника из сет файла при оприделенных условиях. Если да то подскажите где можно почитать о ней или образец кода.Заранее большое спасибо кто ответит.
19.12.2014, 15:06
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
По данному вопросу куча инфы в сети, наприме:
_http://www.mqlvopros.net/?qa=57/%D0%BA%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D1%82%D0%B0%D1%82%D 1%8C-csv-%D1%84%D0%B0%D0%B9%D0%BB-%D0%B8%D0%B7-mql4
Vik940 
19.12.2014, 16:13
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Уважаемые знатоки подскажите пожалуйста существует ли фукция или код автоматической загрузки параметров советника из сет файла при оприделенных условиях. Если да то подскажите где можно почитать о ней или образец кода.Заранее большое спасибо кто ответит.
_http://docs.mql4.com/ru/chart_operations

Последний раз редактировалось NSerega; 19.12.2014 в 17:10.
Vik940 
21.12.2014, 09:15
Аватар для Yura Vakulenko
Yura Vakulenko Yura Vakulenko вне форума Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77

Вопрос Помогите с кодом советника

Здравствуйте! Знающие.. можете помочь верно написать код.. как открывать , а потом и закрывать ордера.. вот по примеру( как на картинке.. Линиии рисовая я руками..)

Стрелки там не перерисовываются! Появляются на 1-м баре (т.е мне нужно чтобы советник открывал ордера не на тиках.. а по закрытию сигнального бара.. т.е. сразу по цене открытия текущего бара, как только на предыдущем нарисовались стрелки.. ) (есть и возможность появления на 0 баре, но это пока не нужно.. ). Их рисует индикатор..

в иникаторе исп 3 буфера.

0 - Основной (Расчетный)
1 - Зона перекупленности
2 - Зона перепроданности

Условие появления стрелки вверх.. (открытие длинной позиции и закрытие всех коротких, если такие имеются... .. по цене открытия текущего бара)
Если (Буфер 0 на 1-м баре > -100 и Буфер 2 на 1-м баре Пуст и Буфер 2 на 2-м баре < -100 )

Условие появления стрелки вниз.. (открытие короткой позиции и закрытие всех длинных, если такие имеются.. по цене открытия текущего бара)
Если (Буфер 0 на 1-м баре < 100 и Буфер 1 на 1-м баре Пуст и Буфер 1 на 2-м баре > 100 )

И расчет лота для серии ордеров (как на покупку, так и на продажу...)
старт лот 0.01
1-ордер серии - лот 0.01
2-ордер серии - лот 0.02
3-ордер серии - лот 0.03
4-ордер серии - лот 0.06
5-ордер серии - лот 0.12
6-ордер серии - лот 0.24
7-ордер серии - лот 0.48
Как только закрылась серия ордеров - расчет лота для новой позиции повторяется по приведенной выше схеме..

Подскажите, как жто мне в коде написать.. или дайте ссылку на источник с примерами как это делается верно!) Спасибо!!
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 21:41. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO