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

 
bestfx:
Всем привет. Помогите пожалуйста.

Суть в следующем: Есть бот, который автоматически выставляет отложенные ордера, при определенной цене. ...
double main_price=1.251;
double price_to_byu=1.253;
double price_to_sell=1.249;
// --------
bool restriction=false;
if (Ask<=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
      {  if (OrderOpenPrice()==price_to_byu) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_BUYSTOP,Lot,price_to_byu, ...);
   return(0);
}
// --------
restriction=false;
if (Bid>=main_price)
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
      {  if (OrderOpenPrice()==price_to_sell) restriction=true;
}  }  }
if (restriction==false)
{  OrderSend(NULL,OP_SELLSTOP,Lot,price_to_sell, ...);
   return(0);
}

Если выставляете очень много подобных ордеров, то надо задействовать массивы. Как? Читайте про массивы.

 
Lisi4ka330:
с 1 июня не поддерживаются версии младше 416 билда

Наташа, они перестали поддерживаться вашим компьютером? )

Поставьте 409 параллельно своему основному терминалу, в соседнюю папку, скиньте туда всю нужную историю и тестируйте сколько влезет, подключение к серверу для этого не нужно. Если вы пользовались скриптами birt'a, то и так наверняка в офлайне.

 
FAQ:
Цену делите на дижитс = приводите к целому числу и пишете ее в меджик, потом перед установкой нового ордера ищете в массиве открытых ордеров по меджику.

:=( фигня какая то получается.
 
paladin80:
Если выставляете очень много подобных ордеров, то надо задействовать массивы. Как? Читайте про массивы.

Читаю, уже третий день. :=( в php все проще, а тут непонйму никак.
 
Lisi4ka330 09.06.2012 20:33
Да, пробовала, но ничего не вышло((((

Тогда можно сделать по другому.

Причем работать будет как в MT4 так и в МТ5.

1. Скачиваете все тики (сами знаете откуда) и записываете на созданный Вами сервер типа MS SQL server, так как объемы данных огромные.

2. Пишите DLL для взаимодействия MT4,МТ5 с SQL сервером.

В МТ4 проверяете флаг IsTesting( ) и если идет тестирование, то вместо значений котировок подставляете данные из базы (туда время обратно цена) вот и все, вроде ничего сложного.

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

 
bestfx:

:=( фигня какая то получается.


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

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

paladin80:

Если выставляете очень много подобных ордеров, то надо задействовать массивы. Как? Читайте про массивы.


OrdersTotal() и OrdersHistoryTotal() и так массив.

 
pusheax:

Тогда можно сделать по другому.

Причем работать будет как в MT4 так и в МТ5.

1. Скачиваете все тики (сами знаете откуда) и записываете на созданный Вами сервер типа MS SQL server, так как объемы данных огромные.

2. Пишите DLL для взаимодействия MT4,МТ5 с SQL сервером.

В МТ4 проверяете флаг IsTesting( ) и если идет тестирование, то вместо значений котировок подставляете данные из базы (туда время обратно цена) вот и все, вроде ничего сложного.

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

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

Не путайте девушку, я только что тестировал советник на 409 билде со старым скриптом, все работает замечательно.

 
alsu:

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

Не путайте девушку, я только что тестировал советник на 409 билде со старым скриптом, все работает замечательно.


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

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

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

 
pusheax:

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

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

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

Напишите уже кто-нибудь нормальный тестер, мультивалютный и с плавающим спредом)))

ps и еще с реальными тиками, блэкджеком и шлюхами

 
bestfx:

Читаю, уже третий день. :=( в php все проще, а тут непонйму никак.
Соглашусь с модератором, что лучше помечать ордера/позиции, чем сравнивать цены открытия. Кроме магик-номера можно задействовать проверку комментариев. Цену открытия можно писать в комментарии (напр. "EURUSD, 1,251").
Причина обращения: