Советники: Советник Day_level - страница 3

 
Платную версию советника можно заказать на сайте http://forexperts.ucoz.ru/
 

2011.01.27 03:41:37 2011.01.20 17:37 Day_level EURUSD,H1: unknown ticket 78 for OrderDelete function

2011.01.27 03:41:37 2011.01.20 17:38 Day_level EURUSD,H1: OrderDelete error 4108

Вот такие ошибки выдает при тесте.

 

Что то не получаются такие же графики по первой версии с теми же настройками, 50 сделок за год.

 
to marker: Попробуйте снова, сегодня была перезалита старая версия советника, исправлены ошибки.
 
Насчёт ошибки с OrderDelete - это не ошибка, просто советник постоянно перепроверяет при наличии изменения рыночных условий, нет ли ещё ненужных ордеров. Некоторые брокеры позволяют себе мухлевать с отложниками, поэтому вынужденная мера.
 
А сколько сделок за год вы хотели увидеть на D1? 500 или может 5000?
 
Ramben:
Насчёт ошибки с OrderDelete - это не ошибка, просто советник постоянно перепроверяет при наличии изменения рыночных условий, нет ли ещё ненужных ордеров. Некоторые брокеры позволяют себе мухлевать с отложниками, поэтому вынужденная мера.

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

а уж про мухлеж брокеров Вы тут совсем зря :)

это ведь просто советник пытается снова и снова удалять ордер по старому тикету, оставшемуся от уже удаленного стопового... при чем же тут война с брокерами? :)

 
посмотрите вот сюда свежим взглядом, пожалуйста :)
  for(int k=1; k<=OrdersTotal(); k++)        
  OrderSelect(k-1,SELECT_BY_POS);
  int type=OrderType();
  int ticket=OrderTicket();
  if (Bid<ma && type==4)
  OrderDelete(ticket);
  if (Bid>ma && type==5)
  OrderDelete(ticket);

этот участок будет работать правильней если, как минимум, вставить проверку на результат OrderSelect() :)

   for(int k=1; k<=OrdersTotal(); k++)
      bool select=OrderSelect(k-1,SELECT_BY_POS);
  
   if(select)
   {
      int type=OrderType();
      int ticket=OrderTicket();
   
      if (Bid<ma && type==4)
          OrderDelete(ticket);
      if (Bid>ma && type==5)
          OrderDelete(ticket);
   }

ошибки удаления по старому тикету уже исчезнут... :)

но... перебирать все ордера в пуле, а потом работать только с одним последним... это как-то странно и вроде бы не по алгоритму :)

может быть вот так:

   for(int k=1; k<=OrdersTotal(); k++)
   {
      bool select=OrderSelect(k-1,SELECT_BY_POS);
  
      if(select)
      {
         int type=OrderType();
         int ticket=OrderTicket();
   
         if (Bid<ma && type==4)
            OrderDelete(ticket);
         if (Bid>ma && type==5)
            OrderDelete(ticket);
      }
   }

:) как-то вот так хотя бы...

но когда из журнала исчезают ошибки удаления, он начинает заполняться "ошибкой 130, неверные стопы"

и тут уж Вам решать, что делать с конструкцией "h+spread*Point"

в OrderSend(... которая и не нравится ему, при определенных значениях...

Удачи Вам! :) с этим экспертом и Вообще! :)

 
Согласен, исправлю! Не обращал на это пристального внимания.
 

А Вы не могли-бы сделать версию советника с трейлингстопом?

тест в ДЦ "Альпари" 2008-2011 гг.