По принципу своей работы индикатор %b – это моментум- осциллятор, сходный, например, со стохастиком. Однако есть и отличия: если у стохастического осциллятора цены колеблются в интервале от 1 до 100, то у нашего индикатора цена может и выходить за эти пределы, например, значение может быть 1,15 или -0,15, что означает- цена находится выше или ниже на 15% от ширины ленты. То, что формально интервал обозначен уровнями 0 и 1, не должно вас путать – это одно и то же, но умноженное на коэффициент 100.
Но что означают, все эти нулевые или единичные уровни?
Это означает, что если:
Самый простой, по сути код. Но Lua выдаёт ошибку при компилировании без function main(), при том что Quik выполняет этот код без конструкции main или function. Раньше такой ошибки не было.message(«a»)
------------------------------Output------------------------------
>lua -e «io.stdout:setvbuf 'no'» «a.lua»
lua: a.lua:1: attempt to call global 'message' (a nil value)
stack traceback:
a.lua:1: in main chunk
[C]: ?
>Exit code: 1
PORTFOLIO_EX LUK; DESCRIPTION Объёмы купли/продажи за интервал; CLIENTS_LIST ALL_CLIENTS; FIRMS_LIST FIRMID; PROGRAM 'Автор: Михаил Булычев 'Что делает: ' подсчитывается объёмы купли\продажи по определённому инструменту за ' заданный интервал 'Как использовать: ' В следующих строках следует указать код бумаги и код класса для ' отслеживаемого инструмента '=============================НАСТРОЙКИ=============================== SecCode="LKOH" ' Код инструмента ClassCode="TQBR" 'Код класса interv=3600 'является интервалом в секундах razn = 0 'смещение часового пояса относительно времени торговой системы. '=============================НАСТРОЙКИ=============================== FUNC is_in_interval(interval, trade_time, sys_time, hour_shift) csys_time_value=0 c_time_value=0 csys_time_value =0 + (0 + get_value(sys_time, "Hour") + hour_shift)*3600 + _ get_value(sys_time, "Min")*60 + _ get_value(sys_time, "Sec") c_time_value=0 + ((0 + substr("" & trade_time, 0, 2)) * 3600) + ((0 + substr("" & trade_time, 2, 2)) * 60) + ((0 + substr("" & trade_time, 4, 2))) csys_time_value = csys_time_value + 0 c_time_value = c_time_value + 0 k=csys_time_value - c_time_value if k <= interval result=1 else result=0 end if END FUNC buy_value=0 sell_value=0 total_value=0 sys_time = GET_DATETIME() delete_all_items() mString=create_map() j=0 n=get_number_of("ALL_TRADES") for i from 0 to n mTrade=get_item("ALL_TRADES", n-i) trade_time=get_value(mTrade, "TIME") if (get_value(mTrade, "SECCODE")= SecCode) AND (get_value(mTrade, "CLASSCODE")= ClassCode) if is_in_interval(interv, trade_time, sys_time, 0-razn) = 1 value=0+get_value(mTrade, "VALUE") j=j+1 if (get_value(mTrade, "OPERATION") = "BUY") buy_value=buy_value+value else sell_value=sell_value+value end if total_value=total_value+value else break end if end if end for mString=set_value(mString, "vol", total_value) mString=set_value(mString, "volbuy", buy_value) mString=set_value(mString, "volsell", sell_value) add_item(1, mString) END_PROGRAM PARAMETER vol; PARAMETER_TITLE vol; PARAMETER_DESCRIPTION Купили; PARAMETER_TYPE NUMERIC(10,0); END PARAMETER volbuy; PARAMETER_TITLE volbuy; PARAMETER_DESCRIPTION Купили; PARAMETER_TYPE NUMERIC(10,0); END PARAMETER volsell; PARAMETER_TITLE volsell; PARAMETER_DESCRIPTION Продали; PARAMETER_TYPE NUMERIC(10,0); END END_PORTFOLIO_EX