[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 389

 
Dimka-novitsek:
При пуске советника ничего,это для проверки,чтоб потом при каждом тике новые рдера не открывалитсь
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

это ваш код, никаких изменений не делал

у вас написано, что ордера будут выставлены если вы выбрав ордер tiket выберете ордер данного символа и данного magic и всего ордеров менее 2

 
Спасибо!! Извините,и точно ерунду написал.
 
drknn:


Без кода сказать трудно. Вполне возможно, что советнеик написан под четырёхзнак, а демосчёт пятизнаковый. Сами понимаете, что если в настройках стоит, например, стоп-лосс ордера в 10 пунктов, то на пятизнаке это такое же расстояние, как 1 пункт на четырёхзнаке. Если при этом минимально-допустимое расстояние для установки стоп-приказов, скажем = 3 пункта, то на пятизнаке это будет уже не три, а тридцать пунктов. Понятно, что на пятизнаке сервер просто отвергнет команду установки ордера со стопом в 10 пунктов.

Хотя, причина может и какая-то другая. Понимаете, Вы у народа спросили, мол, почему не заводится Ваш автомобиль? Народ не сможет сказать причину, не открыв капот и не послушав как машина реагирует на попытки завестись...

Тестер стратегий запускал по EURUSD, на исполнение пробовал запускать по нескольким валютам, EURUSD, GBPUSD, USDJPY - не работает нигде. При отправке ордеров на покупку/продажу использовал Point, так что должно срабатывать для всех-знаков. Больше всего не понятно, почему тестер показывает реультаты, но на демо-счете советник не открывает позиции. В каких случаях это может случиться?

В любом случае спасибо за ответ, вечером повешу код.

 
Dimka-novitsek:


Извините,я тут чушь какую-то написал,если можно,покажите,в каком месте я совсем баранн.

Во всех :)))))))))))))))))))

Давайте с самого начала:

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

Изначально две переменные инициализированы нулём:

int      tiket, tikett;

далее первой строчкой кода мы выбираем ордер по тикету:

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

тут переменная ticket равна нулю. Т.е. пытаемся выбрать ордер с нулевым тикетом. При этом, даже не почитали справку, т.к. при выборе по тикету параметр pool игнорируется, а вы всё-равно указываете MODE_TRADES. Это не ошибка - это лишний параметр в данном случае, который попросту игнорируется. Соответственно ордер с нулевым тикетом не выбирается - его же нет...

Далее всё идет во вложенных условиях; первым же условием является:

if(OrderSymbol()==Symbol())

... если символ выбранного ордера совпадает с символом текущего графика... А так как никакой ордер и не выбран, то мы благополучно добираемся до выхода из start(), ничего при этом не делая.

Смею вас заверить... Далее у вас там не менее интересно, но ... ковыряться не интересно.

Начните пока с поиска уже открытых позиций или установленных отложенных ордеров.

Удачи.

 
ilunga:

это ваш код, никаких изменений не делал

у вас написано, что ордера будут выставлены если вы выбрав ордер tiket выберете ордер данного символа и данного magic и всего ордеров менее 2


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

Наверно, у меня в голове какой-то кризис.

 
Dimka-novitsek:


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

Наверно, у меня в голове какой-то кризис.

Я вам уже расписал пошагово, где у вас кризис...
 
Sersad:

Тестер стратегий запускал по EURUSD, на исполнение пробовал запускать по нескольким валютам, EURUSD, GBPUSD, USDJPY - не работает нигде. При отправке ордеров на покупку/продажу использовал Point, так что должно срабатывать для всех-знаков. Больше всего не понятно, почему тестер показывает реультаты, но на демо-счете советник не открывает позиции. В каких случаях это может случиться?

В любом случае спасибо за ответ, вечером повешу код.


В том-то и дело, что значение Point различается.

 
PapaYozh:


В том-то и дело, что значение Point различается.

Значение Point различается от котировки к котировке, но его суть для всех котировок с любым кол-вом знаков после запятой одинаковое - это минимальный шаг цены.

Именно поэтому ведь то, что я использовал для стоп-лосса, к примеру, Ask-30*Point, а не Ask-0,003, нивелирует совет комментарий drknn.

""...Вполне возможно, что советнеик написан под четырёхзнак, а демосчёт пятизнаковый. Сами понимаете, что если в настройках стоит, например, стоп-лосс ордера в 10 пунктов, то на пятизнаке это такое же расстояние, как 1 пункт на четырёхзнаке. Если при этом минимально-допустимое расстояние для установки стоп-приказов, скажем = 3 пункта, то на пятизнаке это будет уже не три, а тридцать пунктов. Понятно, что на пятизнаке сервер просто отвергнет команду установки ордера со стопом в 10 пунктов...""

double Point - Размер пункта текущего инструмента в валюте котировки.
 

Подскажите.

Написал простенький скрипт, который выводит значение минимально допустимого уровня стоп-лосса/тейк-профита в пунктах.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}

Выводит ноль. Это стандартное значение для этого параметра?

 

fx_max:

Написал простенький скрипт, который выводит значение минимально допустимого уровня стоп-лосса/тейк-профита в пунктах.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

Выводит ноль. Это стандартное значение для этого параметра?


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