int IndicatorCounted( ) Функция возвращает количество баров, не измененных после последнего вызова индикатора. Большинство подсчитанных баров не нуждается в пересчете. Функция используется для оптимизации вычислений.
#property indicator_chart_window
int lb;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//----
if( lb!=Bars )
{
Print("Bars=",Bars," counted_bars=",counted_bars);
lb=Bars;
}
//----
return(0);
}
//+------------------------------------------------------------------+
при появлении нового бара количество неизмененных баров (после последнего вызова индикатора) почему-то уменьшается на 1 в результате приход 1 тика нового бара (изменный бар после него может быть только 1) , а оказывается 2 . Или дескрипшн нужно поправить или функцию
при появлении нового бара количество неизмененных баров (после последнего вызова индикатора) почему-то уменьшается на 1 в результате приход 1 тика нового бара (изменный бар после него может быть только 1) , а оказывается 2 . Или дескрипшн нужно поправить или функцию
зачем менять дескрипшен? это - гарантированно посчитанные бары. разница на 2 обеспечена специально для пограничных случаев. при переходе на новый бар необходимо пересчитать только что закончившийся бар и только что начавшийся.
Функция возвращает количество баров, не измененных после последнего вызова индикатора.
естесственно что на один тик может поменяться только 1 бар, и не имея опыта в написании кода индикаторов, обязательно будешь считать, что функция возвратит предыдущее количество баров (они ведь не менялись), а реально она возвращает на 1 меньше я же с этим столкнулся когда писал о непредусмотренном сдвиге в массиве, я и не подозревал что она вернется к уже посчитанному бару и снова его пересчитает.
А скажите мне такую вещь - если я подряд отправляю 2 ордера один за другим советник учитывает таймауты и ждет или нет? Будут проблемы со вторым ордером или нет?
А скажите мне такую вещь - если я подряд отправляю 2 ордера один за другим советник учитывает таймауты и ждет или нет? Будут проблемы со вторым ордером или нет?
А скажите мне такую вещь - если я подряд отправляю 2 ордера один за другим советник учитывает таймауты и ждет или нет? Будут проблемы со вторым ордером или нет?
Нет.
Да, скорее всего будут - ошибка 146.
Хотя ошибка наиболее вероятна при попытке одновременной торговли из двух экспертов.
На счет отсылки двух ордеров сразу из одного советника не знаю, не уверен.
чтоб не было заморочек с init, сделай в теле ф-ции WriteEquity() что-то типа
if ( first ) { ExtHandle=FileOpen("Equity.csv",FILE_WRITE | FILE_CSV,";"); first = false; }а в инструкции напиши, что в деинит надо вставить строку закрытия файла ;)
StopLevel=Close[1]; if(Ask<StopLevel && OrdersTotal()==0) { OrderSend(Symbol(),OP_BUYSTOP,Lots,StopLevel,3,StopLevel,0); return(0); } if(Bid>StopLevel && OrdersTotal()==0) { OrderSend(Symbol(),OP_SELLSTOP,Lots,StopLevel,3,StopLevel,0); return(0); }StopLevel - уровень установкм ордера и стоплоса. Результат - имеем целую кучу поз закрытых по б/у.
Функция возвращает количество баров, не измененных после последнего вызова индикатора. Большинство подсчитанных баров не нуждается в пересчете. Функция используется для оптимизации вычислений.
#property indicator_chart_window int lb; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- if( lb!=Bars ) { Print("Bars=",Bars," counted_bars=",counted_bars); lb=Bars; } //---- return(0); } //+------------------------------------------------------------------+при появлении нового бара количество неизмененных баров (после последнего вызова индикатора) почему-то уменьшается на 1 в результате приход 1 тика нового бара (изменный бар после него может быть только 1) , а оказывается 2 . Или дескрипшн нужно поправить или функцию
зачем менять дескрипшен? это - гарантированно посчитанные бары. разница на 2 обеспечена специально для пограничных случаев. при переходе на новый бар необходимо пересчитать только что закончившийся бар и только что начавшийся.
присутствует в текущей редакции
естесственно что на один тик может поменяться только 1 бар, и не имея опыта в написании кода индикаторов, обязательно будешь считать, что функция возвратит предыдущее количество баров (они ведь не менялись), а реально она возвращает на 1 меньше я же с этим столкнулся когда писал о непредусмотренном сдвиге в массиве, я и не подозревал что она вернется к уже посчитанному бару и снова его пересчитает.
Нет.
Да, скорее всего будут - ошибка 146.
Нет.
Да, скорее всего будут - ошибка 146.
Хотя ошибка наиболее вероятна при попытке одновременной торговли из двух экспертов.
На счет отсылки двух ордеров сразу из одного советника не знаю, не уверен.