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

 
smartemiy:

Ребята!

как сделать, что бы каждый 40-й ордер был с увеличенным лотом? :: рыночный и отложенный

может так?

Не совсем, нужно считать количество ордеров в истории a = (OrdersHistoryTotal()+ 1) % 40

Ну это без учета сколько может быть одновременно открытых ордеров, иначе еще придется добавлять OrdersTotal (возможно за минусом отложенников).

 
splxgf:

Не совсем, нужно считать количество ордеров в истории a = (OrdersHistoryTotal()+ 1) % 40

Ну это без учета сколько может быть одновременно открытых ордеров, иначе еще придется добавлять OrdersTotal (возможно за минусом отложенников).


А если еще были открыты позиции по другим инструментам, или другими советниками? Думайте что пишите
 
Figar0:

Для начала функция расчета лота у вас объявлена внутри функции start. Вынесите ее. Потом останется несколько ошибок с необъявленной переменной, но да думаю с ними вы сами разберетесь.
Еще один вопрос, в какой функции объявлять расчет лота? init, deinit?
 
skyjet:
Еще один вопрос, в какой функции объявлять расчет лота? init, deinit?

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

Лучше делать отдельную функцию и использовать при необходимости (перед открытием новой позиции)
Виктор, последовав Вашему совету добавил функцию. Теперь не компилируется.
void CheckForOpen()
double Lots()
  {
   double lot;
   lot=(AccountFreeMargin()*AccountLeverage()*Risk)/(MarketInfo(Symbol(), MODE_LOTSIZE));
   lot=NormalizeDouble(lot,1);
   return(lot);
  }
 

Сохранение тиковой истории



avatar
1
Gangrr 22.09.2011 17:32

Всем добрый день!

Вопрос такой - есть скрипт записи тиковой истории

...

FileSeek(ExtHandle,0,SEEK_END);

FileWrite(ExtHandle, TimeToStr(TimeCurrent(), TIME_DATE | TIME_SECONDS), Bid, Ask, iVolume(Symbol(), NULL, 0));

...

пишет он в таком виде:

...

2011.08.15 08:38:49;76.936;76.946;1389

2011.08.15 08:38:51;76.934;76.953;1390
2011.08.15 08:38:56;76.929;76.958;1391
2011.08.15 08:38:56;76.935;76.945;1392

...

То есть, получается что минимальная единица времени это секунда. Так вот вопрос - существует ли способ писать тики в милисекундах ?

Заранее спасибо

 
1
Gangrr 22.09.2011 17:32

То есть, получается что минимальная единица времени это секунда. Так вот вопрос - существует ли способ писать тики в милисекундах ?


посмотрите GetTickCount... или же обращайтесь к функция Windows
 
skyjet:
Виктор, последовав Вашему совету добавил функцию. Теперь не компилируется.

void CheckForOpen()
  {



  }

double Lots()
  {
   double lot;
   lot=(AccountFreeMargin()*AccountLeverage()*Risk)/(MarketInfo(Symbol(), MODE_LOTSIZE));
   lot=NormalizeDouble(lot,1);
   return(lot);
  }
Вложенные функции не допустимы
 
Vinin:

Вложенные функции не допустимы
Это не вложенная функция, а часть базового советника MACD Sample. Пытаюсь добавить рассчитываемый лот. Основная и единственная функция start()