[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 606

 
Roger:


Покажите саму функцию.

Если это void ClosePartPosBySelect(double Part), то поменяйте на

void ClosePartPosBySelect()

А как тогда передать в эту функцию параметр? Допустим:
if (x==2 && y==4) Part=0.5;
else Part=2;

ClosePartPosBySelect(Part);

Кимовская функция ClosePosBySelect() изменена так, что для её работы необходим передаваемый параметр типа double, коим и является переменная Part (от слова "Часть")

 
keekkenen:

два пути

1. в функции, где производится изменение значения добавить амперсант,

например void функция( double& Part ){}

тогда, при изменении значения внутри функции новое значение будет возвращаться в место вызова

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

но чтобы не запутаться лучше 1-й вариант, чтобы не думать что это за переменная, т.к. таких глобально заданных переменных (и внутри одной функции) может быть не одна..


зы. проглядел пост, по сути уже ответили..

Спасибо, попробую...
 
zelek:

Здравствуйте уважаемые профи.

Очень хочу написать советник который бы открывал одновременно две сделки Sell и Buy.

Затем по прошествии определенного количества пунктов (параметр lim), убыточный ордер закрывался,

а прибыльный чтоб закрылся тогда когда цена опустится ниже максимальной цены с момента открытия ордера

(своего рода виртуальный трейлинг-стоп).

В ужасных муках родил вот это, но оно них... не работает

Подскажите плиз чтонибудь

А как вы думаете определяться - откат это или разворот? Или на каждом откате будете открывать по две позиции? Это слив...
 
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()

 
keekkenen:

в тестере нельзя использовать нулевой бар, по той простой причине, что в тестере несмотря на то, что он только формируется (тестерные тики) есть полная информация об ценах этого бара, т.к. он (бар) является свершившимся фактом и так тестер заглядывает в будущее беря данные из истории котировок, а не то что он сам нагенерил тиками.. сделай смещение на один бар влево и считай моментумы для 1,2,3 вместо 0,1,2 и демаркер 1 вместо 0..

также имеет смысл не использовать старшие тф, а использовать только текущий м5, а там где использовались старшие тф увеличить период в кратное число раз.. 14 * PERIOD_H1 / Period() и 14 * PERIOD_М15 / Period()

почему тогда если в тестере принтить каждую цену закрытия нулевого бара, то на каждом тике цена разная?, значит нифига он не сформирован. Тоже самое и на старших таймфреймах, тоже самое и без визуализации. Так где подглядывание то?
 
ну если результат (динамика) не сильно будет отличаться от полученного с использованием нулевого бара, возможно, и нет подглядывания, но лучше подстраховаться от иллюзий..
 

всю голову себе уже сломал :) - такая вот проблема:

советник работает в полуавтоматическом режиме - его входы мои выходы из позиции, но никак не соображу - как заставить советник совершать только одну сделку до моей команды на следующую, т.е. мне просто не хватает кнопки старт/пуск на графике :) . Секция init() у меня занята, отключать советник тож нельзя - его расчеты нужны для правильного трала

 
keekkenen:
ну если результат (динамика) не сильно будет отличаться от полученного с использованием нулевого бара, возможно, и нет подглядывания, но лучше подстраховаться от иллюзий..
Иллюзии иллюзиями, но к концу 2008-го вся дружная братия сработавших лимитников, исправно доливающих депо, не смогла справиться с просадкой, образованной позициями, открытыми по сигналам индюков и вот он, долгожданный звоночек от дяди Коли... :)

Как возможно решать такие проблемы?


Может есть какой способ уменьшения таких просадок? Ваши мысли?

Причина обращения: