Всем привет! Пишу робота торговца акциями сбера на основе АО и Стохастика, ниже приведу код, прошу ваши замечания и предложения! Как минимизировать ложные сигналы, когда лучше открывать и закрывать, торговать планирую на минутном графике. 1 Минутный график 2 АО 10/40 3 Стохастик 10/40 Когда оба начинают расти - покупаем, снижаются - продаем. НО, есть ложные сигналы и запаздывание. Прислушаюсь к советам, что еще добавить для фильтрации. Код робота готов выложить, как закончу. Пишу для квика. Вот что есть сейчас: PORTFOLIO_EX Робот SAMM_1_min; DESCRIPTION Робот на минутном графике; CLIENTS_LIST ALL_CLIENTS; FIRMS_LIST ALL_FIRMS; INCLUDE FUNC_SAMM_1_1M.txt, FUNC_SAMM_2_1M.txt, FUNC_TIME_1M.txt, FUNC_LEN_1M.txt; PROGRAM NEW_GLOBAL("error", 0) NEW_GLOBAL("CANDLE_OLD"," ") ' предыдущая свеча FILE_ID="C:\QUIK\robot\ROBOT_SAMM\ID_SAMM.txt" ' Файл чтения исходных данных FILE_ID_TIME_1="C:\QUIK\robot\ROBOT_SAMM\1_min\ID_TIME_1.txt" ' Файл для хранения данных для первого времени FILE_SUMM="C:\QUIK\robot\ROBOT_SAMM\1_min\FILE_SUMM.txt" FILE_REK_SAMM="C:\QUIK\robot\ROBOT_SAMM\1_min\FILE_REK_SAMM.txt" ' Файл записи параметров рекомендации FILE_DOHOD_SAMM="C:\QUIK\robot\ROBOT_SAMM\1_min\FILE_DOHOD_SAMM.txt" ' Файл записи дохода VOLUME_SAMM="C:\QUIK\robot\ROBOT_SAMM\1_min\VOLUME_SAMM.txt" ' Файл для хранения данных объема ' ----- Исходные данные берутся из FILE_ID ----- CLASSCODE=READ_LINE (FILE_ID, 1*2, error) SECCODE=READ_LINE (FILE_ID, 2*2, error) INTERVAL=str2num(READ_LINE (FILE_ID, 12*2, error)) PROMEGUTKOV=str2num(READ_LINE (FILE_ID, 15*2, error)) ' ----- Окончание ввода исходных данных ----- '------Время сервера--------- SERVERDATE = GET_INFO_PARAM("TRADEDATE") SERVERTIME = GET_INFO_PARAM("SERVERTIME") DATE = SUBSTR(SERVERDATE,6,4) & SUBSTR(SERVERDATE,3,2) & SUBSTR(SERVERDATE,0,2) ' Преобразует дату в формат ГГГГММДД TIME = SUBSTR(SERVERTIME,0,2) & SUBSTR(SERVERTIME,3,2) & SUBSTR(SERVERTIME,6,7) ' Преобразует время в формат ЧЧММСС HH=SUBSTR(SERVERTIME,0,2) MM=SUBSTR(SERVERTIME,3,2) SS=SUBSTR(SERVERTIME,6,7) '-----Расчет появления новой свечи----- FLAG=0 'флаг новой свечи CANDLE = (GET_CANDLE_EX ("SBER_1", DATE, TIME) IF (GET_VALUE (CANDLE,"TIME")-GET_VALUE (CANDLE_OLD,"TIME") <>0) 'свеча новая, закрытие блока в конце программы FLAG=1 'флаг равен 1 в момент появления новой свечи на графике DELETE_ALL_ITEMS() ' Благодаря этой функции из таблицы будут удалены старые значения CLEAR_FILE (FILE_ID_TIME_1) CLEAR_FILE (FILE_SUMM) MA=0+GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE(GET_CANDLE_EX("SBER_MA_1_60", DATE, TIME), "LINES"),0),"CLOSE") m=PROMEGUTKOV FOR kol_int FROM 0 TO m IF kol_int=0 TIME_1=TIME SBER_STOH_1=APPLY_SCALE(0+GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE(GET_CANDLE_EX("SBER_STOH_1", DATE, TIME_1), "LINES"),0),"CLOSE"),3) SBER_AO_1=APPLY_SCALE(0+GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE(GET_CANDLE_EX("SBER_AO_1", DATE, TIME_1), "LINES"),0),"CLOSE"),3) ELSE TIME_1=TIME() SBER_STOH_1=APPLY_SCALE(0+GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE(GET_CANDLE_EX("SBER_STOH_1", DATE, TIME_1), "LINES"),0),"CLOSE"),3) SBER_AO_1=APPLY_SCALE(0+GET_VALUE(GET_COLLECTION_ITEM (GET_VALUE(GET_CANDLE_EX("SBER_AO_1", DATE, TIME_1), "LINES"),0),"CLOSE"),3) END IF STOH_1=SBER_STOH_1() AO_1=SBER_AO_1() writeln(FILE_ID_TIME_1,TIME_1&" " &STOH_1&" " &AO_1) END FOR strok=GET_FILE_LEN (FILE_ID_TIME_1)-1 summ_stoh_1=0 summ_ao_1=0 FOR i FROM 1 TO strok j=i+1 READ_STOH_1_1= SUBSTR (READ_LINE (FILE_ID_TIME_1, i, error),7,6) READ_STOH_1_2= SUBSTR (READ_LINE (FILE_ID_TIME_1, j, error),7,6) READ_AO_1_1= SUBSTR (READ_LINE (FILE_ID_TIME_1, i, error),14,6) READ_AO_1_2= SUBSTR (READ_LINE (FILE_ID_TIME_1, j, error),14,6) summ_stoh_1=READ_STOH_1_1-READ_STOH_1_2+summ_stoh_1 summ_ao_1=READ_AO_1_1-READ_AO_1_2+summ_ao_1 END FOR LAST =0+GET_VALUE(GET_PARAM_EX(CLASSCODE,SECCODE,"LAST"),"PARAM_VALUE") ' Цена последней сделки BID=0+GET_VALUE(GET_PARAM_EX("SPBFUT","SRM2","BID"),"PARAM_VALUE") ' Лучшая цена спроса OFFER=0+GET_VALUE(GET_PARAM_EX("SPBFUT","SRM2","OFFER"), "PARAM_VALUE") ' Лучшая цена предложения WriteSumm(FILE_SUMM, summ_stoh_1, summ_ao_1, MA) IND_1_1=str2num(READ_LINE (FILE_SUMM, 1*2, error)) IND_1_2=str2num(READ_LINE (FILE_SUMM, 2*2, error)) IND_1_3=str2num(READ_LINE (FILE_SUMM, 3*2, error)) S_VOL=str2num(READ_LINE (VOLUME_SAMM, 1, error)) S_AVG=str2num(READ_LINE (VOLUME_SAMM, 2, error)) IF IND_1_1>0 and IND_1_2>0 and LAST>S_AVG and S_VOL>0 REK_1=1 ELSE IF IND_1_10 T_POZ="LONG"&" " &READ_PRICE_T ELSE T_POZ="SHORT"&" " &READ_PRICE_T END IF Massiv = CREATE_MAP() ' Создали массив Massiv = SET_VALUE(Massiv,"S_VOL",S_VOL) Massiv = SET_VALUE(Massiv,"REK_1",REK_1) Massiv = SET_VALUE(Massiv,"DOHOD",DOHOD) Massiv = SET_VALUE(Massiv,"LAST",LAST) Massiv = SET_VALUE(Massiv,"BID",BID) Massiv = SET_VALUE(Massiv,"OFFER",OFFER) Massiv = SET_VALUE(Massiv,"T_POZ",T_POZ) ADD_ITEM(0, Massiv) ' Добавление новой строки в таблицу '----- Конец расчета новой свечи ----- END IF IF (FLAG=1) 'запоминаем новую свечу CANDLE_OLD=CANDLE END IF END_PROGRAM PARAMETER REK_1; PARAMETER_TITLE REK_1; PARAMETER_DESCRIPTION REK_1; PARAMETER_TYPE NUMERIC(8,0); END PARAMETER DOHOD; PARAMETER_TITLE Доход; PARAMETER_DESCRIPTION Доход; PARAMETER_TYPE NUMERIC(8,2); END PARAMETER LAST; PARAMETER_TITLE LAST; PARAMETER_DESCRIPTION LAST; PARAMETER_TYPE NUMERIC(8,2); END PARAMETER BID; PARAMETER_TITLE BID; PARAMETER_DESCRIPTION BID; PARAMETER_TYPE NUMERIC(8,0); END PARAMETER OFFER; PARAMETER_TITLE OFFER; PARAMETER_DESCRIPTION OFFER; PARAMETER_TYPE NUMERIC(8,0); END PARAMETER S_VOL; PARAMETER_TITLE Сум.объём; PARAMETER_DESCRIPTION S_VOL; PARAMETER_TYPE NUMERIC(10,0); END PARAMETER T_POZ; PARAMETER_TITLE Позиция; PARAMETER_DESCRIPTION T_POZ; PARAMETER_TYPE STRING(20); END END_PORTFOLIO_EX