Ответ
 
Опции темы
16.12.2014, 21:14
Аватар для Milord
Milord Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 702 раз(а) / Репутация: 705
Сообщение от Ugar Посмотреть сообщение
Вот про это я и говорю. Условие 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.
Milord вне форума Ответить с цитированиемОтветить с цитированием  
16.12.2014, 21:26
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
мое имхо
тригер=2
при выполнеии условия если if(.....и ( тригер!=1)
выполнили тригер=1
второеусловие если .....if(тригер=0( тригер!=0)
выполнили тригер=0
и все)))

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milord (17.12.2014)
17.12.2014, 02:58
Аватар для Milord
Milord Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 702 раз(а) / Репутация: 705
Сообщение от ksardas Посмотреть сообщение
мое имхо
тригер=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 ШАГА (Лао Цзы)
Milord вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ksardas (19.12.2014)
17.12.2014, 16:04
Аватар для Alexz2107
Alexz2107 Интересующийся
Регистрация: 05.05.2011 / Сообщений: 16
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

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


Все здравствуйте! Написал советника, а он, собака, виснет. Виснет, я так полагаю, одна функция. Суть в том, что у него несколько режимов работы. В штатном режиме все функционирует прекрасно, когда ситуация становится критической, активируется режим спасения. Переключение тоже проходит безупречно. А вот этот самый режим спасения начинает работать, открывает несколько ордеров и быстро зависает. То есть терминал вроде работает, котировки поступают, но советник ордера не открывает. Пытаюсь снять его с графика, терминал зависает наглухо, закрываю его только Завершением задачи. При перезагрузке запускаю спасение вручную, или оно активируется автоматом - происходит то же самое, несколько ордеров и заклинивает. Подскажите, пожалуйста, как, собственно, искать ошибку? Или лучше с маху переписать всю эту функцию?
Alexz2107 вне форума Ответить с цитированиемОтветить с цитированием  
17.12.2014, 16:39
Регистрация: 13.03.2009 / Сообщений: 2,320
Поблагодарили 1,944 раз(а) / Репутация: 2019
Сообщение от Alexz2107 Посмотреть сообщение
Все здравствуйте! Написал советника, а он, собака, виснет. Виснет, я так полагаю, одна функция. Суть в том, что у него несколько режимов работы. В штатном режиме все функционирует прекрасно, когда ситуация становится критической, активируется режим спасения. Переключение тоже проходит безупречно. А вот этот самый режим спасения начинает работать, открывает несколько ордеров и быстро зависает. То есть терминал вроде работает, котировки поступают, но советник ордера не открывает. Пытаюсь снять его с графика, терминал зависает наглухо, закрываю его только Завершением задачи. При перезагрузке запускаю спасение вручную, или оно активируется автоматом - происходит то же самое, несколько ордеров и заклинивает. Подскажите, пожалуйста, как, собственно, искать ошибку? Или лучше с маху переписать всю эту функцию?
обычно зависания связаны с зацикливанием или сном. Если он выполняет Sleep(60000); то минуту советник не открывает свойства, не удаляется и вообще ничего не делает. Нужно дождаться когда проснётся.

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

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

Ну или продумать алгоритм так что бы избежать зависания. Может продумать заново и переписать функцию с циклом.

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

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

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

}
Думаю, не надо объяснять как использовать переменные на глобальном уровне для передачи команд в в функцию таймера и как передать результат выполнения обратно.

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

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Последний раз редактировалось Gnn-life; 19.12.2014 в 01:42.
Gnn-life вне форума Ответить с цитированиемОтветить с цитированием  
19.12.2014, 05:41
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,710 раз(а) / Репутация: 3706
Сообщение от Gnn-life Посмотреть сообщение
Уважаемые прогеры...или начинающие, вобщем вопрос? как вставить в советник индикатор i-custom(весь код), дальше разберусь (наверно)...извините учусь....
А в документации разве не весь код? _http://docs.mql4.com/ru/indicators/icustom
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
19.12.2014, 14:52
Аватар для Vik940
Vik940 Почётный гражданин
Регистрация: 26.05.2012 / Сообщений: 138
Поблагодарили 339 раз(а) / Репутация: 340
Уважаемые знатоки подскажите пожалуйста существует ли фукция или код автоматической загрузки параметров советника из сет файла при оприделенных условиях. Если да то подскажите где можно почитать о ней или образец кода.Заранее большое спасибо кто ответит.
Vik940 на форуме Ответить с цитированиемОтветить с цитированием  
19.12.2014, 15:06
Аватар для 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
matro3 на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Vik940 (19.12.2014)
19.12.2014, 16:13
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,710 раз(а) / Репутация: 3706
Сообщение от Vik940 Посмотреть сообщение
Уважаемые знатоки подскажите пожалуйста существует ли фукция или код автоматической загрузки параметров советника из сет файла при оприделенных условиях. Если да то подскажите где можно почитать о ней или образец кода.Заранее большое спасибо кто ответит.
_http://docs.mql4.com/ru/chart_operations

Последний раз редактировалось NSerega; 19.12.2014 в 17:10.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Vik940 (19.12.2014)
21.12.2014, 09:15
Аватар для 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
Как только закрылась серия ордеров - расчет лота для новой позиции повторяется по приведенной выше схеме..

Подскажите, как жто мне в коде написать.. или дайте ссылку на источник с примерами как это делается верно!) Спасибо!!
Миниатюры:
Нажмите на изображение для увеличения
Название: GBPUSDproH1.png
Просмотров: 13
Размер:	37.2 Кб
ID:	189063  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
Yura Vakulenko вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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