Вопрос по мультивалютному советнику - страница 10

 
rid >>:
Однако, мне нужно - чтобы функция трейлинг стоп была при этом реализована по всем тикам.

Ощутимую пользу от потикового трала можно наблюдать только на коротком участке за счёт подгонки.

Как правило грубый трал не хуже (если ТС не пипсовочно-скальперская).

А вот преимущества оптимизации "по ценам открытия" при использовании потикового трала пропадают, что очень существенно.

В последнее время отказался от тралов почти на всех ТС.

Лучше работает частичное/полное закрытие позиции (возможно переворотом) по обратному сигналу.

 

А я использую пороговый трал. И если настроить порог начала работы, - то есть резон...

extern string   ____________= "Параметры Трейлинг стопа";
extern bool UseTrailing = false;
extern int lMinProfit = 150;
extern int sMinProfit = 160;
extern int lTrailingStop = 50;
extern int sTrailingStop = 60;
extern int lTrailingStep = 5;
extern int sTrailingStep = 5;
//--------------------------------------------------------
int start()
  {
  if(Time[0] == prevtime)   return(0);
   prevtime = Time[0];//если появился новый бар , включаемся
//-------------------------------------------------------------------   
if (UseTrailing) TrailPositions(); //трейлинг стоп

//--------------------------------------------------------------
... ... ... ... ... ... ... ... ... ... ... ... 
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void TrailPositions() //пороговый трейлинг стоп
{  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol() && OrderMagicNumber()==Magic) continue; 
    if (OrderType() == OP_BUY) {
      if (Bid-OrderOpenPrice() > lMinProfit*Point) {
        if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
                                                    OrderTakeProfit(), 0, Blue);
        }}}
    if (OrderType() == OP_SELL) {
      if (OrderOpenPrice()-Ask > sMinProfit*Point) {
        if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || 
                                                      OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
                                                     OrderTakeProfit(), 0, Blue);
        }}}}}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
 

Вообще не понимаю, какой смысл использовать потиково пороговый трал?

 

Добрый день всем. Проблема опять.

С индикатором.

Не могу написать iCustom

Написал вот так:

double ActivatorBLUE=iCustom(NULL,0,"HL Next Activator",ActivatorPeriod, useFullPeriods,0,1);
//синие уровни на 1 баре
double ActivatorRED=iCustom(NULL,0,"HL Next Activator",ActivatorPeriod, useFullPeriods, 1,1);
//красные уровни на 1 баре
Comment(ActivatorBLUE,"-",ActivatorRED);

Но в обоих случаях возвращаются значения только синего уровня. Не пойму почему! Ведь номера буферов я предусмотрел 1 и 0 соответственно!

Даже в комменте отображаются одинаковые значения - синего уровня

Вот так заданы буферы в ините индикатора :

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,SellActivator);//синий
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(1,BuyActivator);//красный
   SetIndexEmptyValue(1,0.0);
   if (useFullPeriods!=0) useFullPeriods=1;
//----
   return(0);
  }

Пож. подскажите? Индикатор в закачке (Автор индюка - Rosh).

Файлы:
 
rid писал(а) >>

Добрый день всем. Проблема опять.

С индикатором.

Не могу написать iCustom

Проверил, у меня выдает такое:

2008.10.29 15:13:49 2008.10.28 12:51 testhl EURUSD,H1: 1.2395-0
2008.10.29 15:13:49 2008.10.28 12:51 testhl EURUSD,H1: 1.2395-0
2008.10.29 15:13:49 2008.10.28 12:51 testhl EURUSD,H1: 1.2395-0
2008.10.29 15:13:48 2008.10.28 05:52 testhl EURUSD,H1: 0-1.2547
....
2008.10.29 15:13:48 2008.10.28 05:51 testhl EURUSD,H1: 0-1.2547
2008.10.29 15:13:48 2008.10.28 05:51 testhl EURUSD,H1: 0-1.2547
2008.10.29 15:13:47 2008.10.27 18:49 testhl EURUSD,H1: 1.2414-1.2542
.....
2008.10.29 15:13:47 2008.10.27 18:49 testhl EURUSD,H1: 1.2414-1.2542
2008.10.29 15:13:46 2008.10.27 14:54 testhl EURUSD,H1: 0-1.2612

Глубо не вникал, но кажется это правильно, индикатор брал с параметрами по умолчанию, вызов значений строкой

Print(iCustom(NULL,0,"HLdNextmActivator",0,1),"-",iCustom(NULL,0,"HLdNextmActivator", 1,1));
 

Благодарю.

Странно. Вот и у меня вдруг заработал. Ничего не исправлял, не делал.

Но ведь не работал с утра! Два часа мучился. "Зуб даю..."

Не первый раз замечаю такое. Вот на простом индюке что-ниб простое сделаю. И вдруг изначально не работает!

Без видимых причин! Хотя конструкция простейшая. Ну ладно, думаю. Потом ещё попробую...

А КАК ПОЛЕЖИТ ДЕНЁК-ДРУГОЙ, И я её включаю, смотрю - заработала так, как надо!

Чудеса, какие-то...

С параболликом один раз так было. Задал условия открытия позиции при смене "знака" параболлика.

Ну самое примитивное условие. Так не стал в тестере работать! Два дня я, матерно ругаясь, пытался выяснить - в чем дело. Так и не понял. Плюнул, - ладно, думаю, потом... А через день включил и ... - смотрю, заработал, как часики...

 
rid >>:

..............потом... А через день включил и ... - смотрю, заработал, как часики...

Чукча приходит к часовщику.

- Эта у меня часа сломалась.

Механик берёт будильник открывает, от туда падает дохлый таракан.

- Не будет работать однако (

- Почему ?

- Механик сдох однако

 

Добрый день всем. Никак не могу решить проблему.

Эксперт выставляет отложенные ордера, например OP_BUYSTOP  - четыре ордера

OP_BUYSTOP магик 1

OP_BUYSTOP магик 2

OP_BUYSTOP магик 3

OP_BUYSTOP магик 4 

Выставляет их - на заданной дистанции  от цены и заданном шаге друг от друга.

Далее. Если цена пошла вниз, мне нужно чтобы ордера перемещались вслед за ценой с заданным шагом.

Это я сделал. Особых трудностей тут не возникло.

 

Однако!

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

Мне нужно, чтобы самый дальний от текущей цены ордер перепрыгнул через все остальные и стал самым ближним!

И так далее,чтобы при дальнейшем движении цены вниз самые дальние ордера последовательно перепрыгивали ближе к цене!

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

Подскожите, кто может.

Или может есть ссыль на что-то аналогичное?

Нашел функции в ветке И.Кима. Но как применить их здесь, пока не ясно.

//----------------------------------------------------------------------------------------------------------------------------

Функция GetIndexByTicket(). Эта функция возвращает индекс ордера или позиции по тикету

Функция IndexByTicket(). Возвращает индекс (порядковый номер в общем списке установленных ордеров или открытых позиций) ордера или позиции по тикету

Функция GetOrderOpenPrice(). Возвращает цену установки последнего выставленного ордера 

 

Создаем два массива. Один по номеру тикета, второй по цене. Потом сортируем массив по цене, одновременно перемещая номера тикетов (не нарушая связи). Тогда с одного конца массива будет самая маленькая цена, с другого самая большая цена. Осталось изменить один их крайних ордеров.

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