Если это void ClosePartPosBySelect(double Part), то поменяйте на
void ClosePartPosBySelect()
А как тогда передать в эту функцию параметр? Допустим:
if (x==2 && y==4) Part=0.5;
else Part=2;
ClosePartPosBySelect(Part);
Кимовская функция ClosePosBySelect() изменена так, что для её работы необходим передаваемый параметр типа double, коим и является переменная Part (от слова "Часть")
1. в функции, где производится изменение значения добавить амперсант,
например void функция( double& Part ){}
тогда, при изменении значения внутри функции новое значение будет возвращаться в место вызова
2. убрать переменную из списка параметров функции, т.к. переменная задана глобально, то ее значение можно изменять в любом месте кода не передавая ее в качестве параметра..
но чтобы не запутаться лучше 1-й вариант, чтобы не думать что это за переменная, т.к. таких глобально заданных переменных (и внутри одной функции) может быть не одна..
artmedia70: А как тогда передать в эту функцию параметр?
Если параметр объявлен на глобальном уровне, его передавать не надо, прямо присваивайте нужное значение. Только тогда ее не надо переопределять в функции.
Это весь 2009 год... Для входа используются лишь показания Momentum`а: на ТФ Н1 ищем момент перелома движения моментума, а на ТФ М5 находим точный момент входа в рынок. При открытии позиции проверяется время открытия предыдущей, чтобы на момент действия сигнала на вход не открыться на всё депо... Момент входа подтверждается положением Демаркера в зонах перекупленности/перепроданностя на ТФ М5 и М15... ... Кстати, без локирующих тоже был положительный результат.
... Даже то, что я по-невнимательности запустил тест только с проверкой по Демаркер, всё-равно дало интересный результат:
Что-то где-то как-то так:
//---------------------------------------------------------
MomML_0 =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,0);
MomML_1 =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,1);
MomML_2 =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,2);
MomST_0 =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,0);
MomST_1 =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,1);
MomST_2 =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,2);
DeM5 =iDeMarker(NULL,PERIOD_M5, 14,0);
DeM15 =iDeMarker(NULL,PERIOD_M15,14,0);
//---------------------------------------------------------//==============================================================================================// Поиск пересечений//============================================================================================== //----------------------- Проверка условий для старшего ТФ -------------------- // ---------- Покупка --------
MomBuy56M15=false;
if (
MomST_0<100 &&
MomST_1<100 &&
MomST_2<100 &&
MomST_0>MomST_1 &&
MomST_1<MomST_2 &&
DeM15<0.3
)
{
MomBuy56M15=true;
}
// ---------- Продажа --------
MomSell56M15=false;
if (
MomST_0>100 &&
MomST_1>100 &&
MomST_2>100 &&
MomST_0<MomST_1 &&
MomST_1>MomST_2 &&
DeM15>0.7
)
{
MomSell56M15=true;
}
//----------------------- Проверка условий для младшего ТФ --------------------- // ---------- Покупка --------
MomBuy56M5=false;
if (
MomML_0<100 &&
MomML_1<100 &&
MomML_2<100 &&
MomML_0>MomML_1 &&
MomML_1<MomML_2 &&
DeM5<0.3
)
{
MomBuy56M5=true;
}
// ---------- Продажа --------
MomSell56M5=false;
if (
MomML_0>100 &&
MomML_1>100 &&
MomML_2>100 &&
MomML_0<MomML_1 &&
MomML_1>MomML_2 &&
DeM5>0.7 // ... и тут ...
)
{
MomSell56M5=true;
}
//==============================================================================================// Вычисление основных торговых критериев//==================================================================== if (
MomBuy56M15==true &&
MomBuy56M5 ==true
)
return(106); // Открытие Buy по стратегии 6 //==================================================================== if (
MomSell56M15==true &&
MomSell56M5 ==true
)
return(206); // Открытие Sell по стратегии 6 //====================================================================
Интересно, если результат похожий, то зачем тогда использовать моментум, который хорошо (как пишут) показывает момент истощения (завершения) тренда? При переломах моментума цена продолжала подниматься и позиции открывались при каждом новом переломе моментума... Вот именно ранние входы я и решил локировать... Кто что думает по этому поводу?
в тестере нельзя использовать нулевой бар, по той простой причине, что в тестере несмотря на то, что он только формируется (тестерные тики) есть полная информация об ценах этого бара, т.к. он (бар) является свершившимся фактом и так тестер заглядывает в будущее беря данные из истории котировок, а не то что он сам нагенерил тиками.. сделай смещение на один бар влево и считай моментумы для 1,2,3 вместо 0,1,2 и демаркер 1 вместо 0..
также имеет смысл не использовать старшие тф, а использовать только текущий м5, а там где использовались старшие тф увеличить период в кратное число раз.. 14 * PERIOD_H1 / Period() и 14 * PERIOD_М15 / Period()
в тестере нельзя использовать нулевой бар, по той простой причине, что в тестере несмотря на то, что он только формируется (тестерные тики) есть полная информация об ценах этого бара, т.к. он (бар) является свершившимся фактом и так тестер заглядывает в будущее беря данные из истории котировок, а не то что он сам нагенерил тиками.. сделай смещение на один бар влево и считай моментумы для 1,2,3 вместо 0,1,2 и демаркер 1 вместо 0..
также имеет смысл не использовать старшие тф, а использовать только текущий м5, а там где использовались старшие тф увеличить период в кратное число раз.. 14 * PERIOD_H1 / Period() и 14 * PERIOD_М15 / Period()
почему тогда если в тестере принтить каждую цену закрытия нулевого бара, то на каждом тике цена разная?, значит нифига он не сформирован. Тоже самое и на старших таймфреймах, тоже самое и без визуализации. Так где подглядывание то?
ну если результат (динамика) не сильно будет отличаться от полученного с использованием нулевого бара, возможно, и нет подглядывания, но лучше подстраховаться от иллюзий..
всю голову себе уже сломал :) - такая вот проблема:
советник работает в полуавтоматическом режиме - его входы мои выходы из позиции, но никак не соображу - как заставить советник совершать только одну сделку до моей команды на следующую, т.е. мне просто не хватает кнопки старт/пуск на графике :) . Секция init() у меня занята, отключать советник тож нельзя - его расчеты нужны для правильного трала
keekkenen: ну если результат (динамика) не сильно будет отличаться от полученного с использованием нулевого бара, возможно, и нет подглядывания, но лучше подстраховаться от иллюзий..
Иллюзии иллюзиями, но к концу 2008-го вся дружная братия сработавших лимитников, исправно доливающих депо, не смогла справиться с просадкой, образованной позициями, открытыми по сигналам индюков и вот он, долгожданный звоночек от дяди Коли... :)
Как возможно решать такие проблемы?
Может есть какой способ уменьшения таких просадок? Ваши мысли?
Покажите саму функцию.
Если это void ClosePartPosBySelect(double Part), то поменяйте на
void ClosePartPosBySelect()
Кимовская функция ClosePosBySelect() изменена так, что для её работы необходим передаваемый параметр типа double, коим и является переменная Part (от слова "Часть")
два пути
1. в функции, где производится изменение значения добавить амперсант,
например void функция( double& Part ){}
тогда, при изменении значения внутри функции новое значение будет возвращаться в место вызова
2. убрать переменную из списка параметров функции, т.к. переменная задана глобально, то ее значение можно изменять в любом месте кода не передавая ее в качестве параметра..
но чтобы не запутаться лучше 1-й вариант, чтобы не думать что это за переменная, т.к. таких глобально заданных переменных (и внутри одной функции) может быть не одна..
зы. проглядел пост, по сути уже ответили..
Здравствуйте уважаемые профи.
Очень хочу написать советник который бы открывал одновременно две сделки Sell и Buy.
Затем по прошествии определенного количества пунктов (параметр lim), убыточный ордер закрывался,
а прибыльный чтоб закрылся тогда когда цена опустится ниже максимальной цены с момента открытия ордера
(своего рода виртуальный трейлинг-стоп).
В ужасных муках родил вот это, но оно них... не работает
Подскажите плиз чтонибудь
А как тогда передать в эту функцию параметр?
Это весь 2009 год... Для входа используются лишь показания Momentum`а:
на ТФ Н1 ищем момент перелома движения моментума, а на ТФ М5 находим точный момент входа в рынок. При открытии позиции проверяется время открытия предыдущей, чтобы на момент действия сигнала на вход не открыться на всё депо...
Момент входа подтверждается положением Демаркера в зонах перекупленности/перепроданностя на ТФ М5 и М15...
... Кстати, без локирующих тоже был положительный результат.
... Даже то, что я по-невнимательности запустил тест только с проверкой по Демаркер, всё-равно дало интересный результат:

Что-то где-то как-то так:
Интересно, если результат похожий, то зачем тогда использовать моментум, который хорошо (как пишут) показывает момент истощения (завершения) тренда? При переломах моментума цена продолжала подниматься и позиции открывались при каждом новом переломе моментума... Вот именно ранние входы я и решил локировать...
Кто что думает по этому поводу?
в тестере нельзя использовать нулевой бар, по той простой причине, что в тестере несмотря на то, что он только формируется (тестерные тики) есть полная информация об ценах этого бара, т.к. он (бар) является свершившимся фактом и так тестер заглядывает в будущее беря данные из истории котировок, а не то что он сам нагенерил тиками.. сделай смещение на один бар влево и считай моментумы для 1,2,3 вместо 0,1,2 и демаркер 1 вместо 0..
также имеет смысл не использовать старшие тф, а использовать только текущий м5, а там где использовались старшие тф увеличить период в кратное число раз.. 14 * PERIOD_H1 / Period() и 14 * PERIOD_М15 / Period()
в тестере нельзя использовать нулевой бар, по той простой причине, что в тестере несмотря на то, что он только формируется (тестерные тики) есть полная информация об ценах этого бара, т.к. он (бар) является свершившимся фактом и так тестер заглядывает в будущее беря данные из истории котировок, а не то что он сам нагенерил тиками.. сделай смещение на один бар влево и считай моментумы для 1,2,3 вместо 0,1,2 и демаркер 1 вместо 0..
также имеет смысл не использовать старшие тф, а использовать только текущий м5, а там где использовались старшие тф увеличить период в кратное число раз.. 14 * PERIOD_H1 / Period() и 14 * PERIOD_М15 / Period()
всю голову себе уже сломал :) - такая вот проблема:
советник работает в полуавтоматическом режиме - его входы мои выходы из позиции, но никак не соображу - как заставить советник совершать только одну сделку до моей команды на следующую, т.е. мне просто не хватает кнопки старт/пуск на графике :) . Секция init() у меня занята, отключать советник тож нельзя - его расчеты нужны для правильного трала
ну если результат (динамика) не сильно будет отличаться от полученного с использованием нулевого бара, возможно, и нет подглядывания, но лучше подстраховаться от иллюзий..
Как возможно решать такие проблемы?
Может есть какой способ уменьшения таких просадок? Ваши мысли?