'========= Перемещение заявки FUNC MORDER(FTRID,FON,FONQ,FONP) NEW_GLOBAL("TRANS_PARAMS", "") NEW_GLOBAL("TRANS_RESULT", "") TRANS_PARAMS = "" TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID",FTRID) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "MOVE_ORDERS") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "MODE",0) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", "SPBFUT") TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NUMBER",FON) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NEW_QUANTITY",FONQ) TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "FIRST_ORDER_NEW_PRICE",FONP) TRANS_RESULT = SEND_TRANSACTION (300, TRANS_PARAMS) RESULT=GET_VALUE(TRANS_RESULT, "DESCRIPTION") MESSAGE (RESULT,1) END FUNC '========= Операция перестановки IF MPRICE < LOW MORDER(MTRANS_ID,MNUMBER,MBALANCE,LOW+STEP) END IF '====================================== 'MTRANS_ID - номер заявки на бирже 'MNUMBER - номер заявки в таблицах 'MBALANCE - объем 'LOW - минимум свечи 'STEP - отступ для лимитки 'MPRICE - последняя цена
function main() local Trades = {} local comission = 0 SearchItems('trades', 0, getNumberOf('trades')-1, function (class_code, trade_num, flags, exchange_comission) if class_code == 'SPBFUT' or class_code == 'SPBOPT' then -- Учитываем только сделки на срочной секции comission = comission + exchange_comission local t = {flags & 0x4, exchange_comission} if Trades[class_code] then Trades[class_code][trade_num] = t else Trades[class_code] = {[trade_num] = t} end end return false end, 'class_code,trade_num,flags,exchange_comission') local total = 0 local maker = 0 local taker = 0 local comission2 = 0 SearchItems('all_trades', 0, getNumberOf('all_trades')-1, function (class_code, trade_num, flags, sec_code) if Trades[class_code] then local t = Trades[class_code][trade_num] if t then total = total + 1 if flags & 0x1 ~= 0 then if t[1] == 0 then maker = maker + 1 else taker = taker + 1 comission2 = comission2 + t[2] end elseif flags & 0x2 ~= 0 then if t[1] == 0 then taker = taker + 1 comission2 = comission2 + t[2] else maker = maker + 1 end else comission2 = comission2 + t[2] end end end return false end, 'class_code,trade_num,flags,sec_code') message(string.format('total: %u\nmaker: %u\ntaker: %u\n\ncomission\nсейчас: %.2f\nскальпинг: %.2f\nстанет: %.2f', total, maker, taker, comission, comission / 2, comission2 * 3)) end
Тут стоить отметить, что есть «хорошее» прогнозирование — построение разных сценариев движения цены и реакции на них в рамках торговой системы.
Плохое прогнозирование — это твёрдая уверенность в определенном движении цены.
Трейдеры должны торговать график, время и объёма, а не свои ожидания.