Блог им. Nasrulo

==** Помогите переделать скрипт на Qpile**==

Добрый день, уважаемые коллеги! Есть скрипт передачи данных из Квика в Эксель по номеру свечи(взятый от сюда  www.trade-bot.ru/kak-po-nomeru-bara-poluchit-kotirovku/#more-48     я его чуть переделал, для получения данных по объемам), но работает только на данных интрадей.Помогите пожалуйста переделать его на дневные свечи.Или может его вообще можно тупо упростить, т.к. нужны ОНLCV текущей дневной свечи, наверное циклы можно поубирать и сделать как то проще.Я сам в программировании 0, прошу не судить строго.Вот сам скрипт...


PORTFOLIO_EX OHLC;
DESCRIPTION OHLC;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
USE_CASE_SENSITIVE_CONSTANTS;                        
PROGRAM
' Настраиваемые параметры

ClassCodeList=«SPBFUT» ' код класса инструмента

INSTRUMENT =«SiH4» ' Задаем инструмент, внимательно указываем регистр у Si маленькая i, а у RI большая
Interval=60 ' интервал (таймфрейм) на графике
DayToFind=10 ' сколько дней назад искать свечи (можно уменьшить, чтоы ускорить работу программы)
CandleToFind=1 ' сколько свечей надо найти
OutFile = «c:\quotes.csv»     ' файл, куда записывать данные в формате CSV

DELETE_ALL_ITEMS()
CandleCount=0
CurYear=get_value(GET_DATETIME(), «YEAR»)
CurMonth=get_value(GET_DATETIME(), «MONTH»)
CurDay=get_value(GET_DATETIME(), «DAY»)
CurHour = GET_VALUE(GET_DATETIME(), «HOUR»)
CurMin = GET_VALUE(GET_DATETIME(), «MIN»)
CurMin = Interval*Floor(CurMin/Interval) ' округляем минуты до «интервальных»
for i from 1 to (DayToFind*24)*(Floor(60/Interval))
  TextData=fTextData(CurYear,CurMonth,CurDay) &""
  TextTime=fTextTime(CurHour,CurMin) & ""
  if (CandleCount<CandleToFind) ' если нашли сколько нам надо свечей — гоняем пустой цикл
    Candle=GET_CANDLE(ClassCodeList,Instrument, "", Interval & "", «PRICE», TextData, TextTime)
    Open=GET_VALUE (Candle, «OPEN»)+0
    if (Open>0)
      CandleCount=CandleCount+1
      High=GET_VALUE (Candle, «HIGH»)+0
      Low=GET_VALUE (Candle, «LOW»)+0
      Close=GET_VALUE (Candle, «CLOSE»)+0
      Volume=GET_VALUE (Candle, «VOLUME»)+0
      output=CREATE_MAP()
      output=SET_VALUE(output,«DATE»,TextData)
      output=SET_VALUE(output,«TIME»,TextTime)
      output=SET_VALUE(output,«OPEN»,Open)
      output=SET_VALUE(output,«HIGH»,High)
      output=SET_VALUE(output,«LOW»,Low)
      output=SET_VALUE(output,«CLOSE»,Close)
      output=SET_VALUE(output,«VOLUME»,Volume)
      ADD_ITEM(CandleCount,output)
      WRITELN(OutFile, TextData  & "," & TextTime & "," & Open & "," & High & "," & Low & "," & Close &"," & Volume  )
    end if
    ' откат на «интервал» назад
    CurMin=CurMin-Interval
    if CurMin<0
      CurMin=60+CurMin
      CurHour=CurHour-1
      if CurHour<0
        CurHour=23
        CurDay=CurDay-1
        if curDay<1
          CurDay=31
          CurMonth=CurMonth-1
          if CurMonth<1
            CurMonth=12
            CurYear=CurYear-1
            if CurYear<0
              message («Не найдены котировки до рождества Христова! <img src=»www.trade-bot.ru/wp-includes/images/smilies/icon_biggrin.gif" alt=":-D" class=«wp-smiley»> ",1)
            end if
          end if
        end if
      end if
    end if
  end if
end for

' функция перевода даты в текстовый формат
func fTextData(Year,Month,Day)
  if (LEN(Month) < 2)
    Month = «0» & Month
  end if
    if (LEN(Day) < 2)
    Day = «0» & Day
  end if
  result = Year & Month & Day
end func

' функция перевода времени в текстовый формат
func fTextTime(Hour,Min,Sec)
  if (LEN(Hour) < 2)
    Hour = «0» & Hour
  end if
    if (LEN(Min) < 2)
    Min = «0» & Min
  end if
  result = Hour & Min & «00»
end func

END_PROGRAM

PARAMETER Date;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата;
PARAMETER_TYPE STRING(30);
END

PARAMETER Time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(30);
END

PARAMETER Open;
PARAMETER_TITLE Open;
PARAMETER_DESCRIPTION Open;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER High;
PARAMETER_TITLE High;
PARAMETER_DESCRIPTION High;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER Low;
PARAMETER_TITLE Low;
PARAMETER_DESCRIPTION Low;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER Close;
PARAMETER_TITLE Close;
PARAMETER_DESCRIPTION Close;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER Volume;
PARAMETER_TITLE Volume;
PARAMETER_DESCRIPTION Volume;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX
    ★3
    15 комментариев
    купайл овно, как и сам квик, для начала попробуйте заменить строчку TextTime=fTextTime(CurHour,CurMin) & "" на TextTime=fTextTime(CurHour,CurMin,0) & ""
    avatar
    DmitryAK, Не работает, гад такой! Я так понял, что опереатор Interval бывает от 0 до 60 и нужно как то DAY прикрутить, но у меня всё равно в таблицу ничего не выводится.
    Молодой поэт Таджикский, вместо Interval=60 попробуйте Interval= -1 или Interval= «day»
    avatar
    DmitryAK, Всё равно выходит пустая таблица.
    А нельзя как нибудь написать мол вот текущая свеча, а вот её ОНLCV ?!?!?!?1
    PORTFOLIO_EX OHLC;
    DESCRIPTION OHLC;
    CLIENTS_LIST ALL_CLIENTS;
    FIRMS_LIST ALL_FIRMS;
    USE_CASE_SENSITIVE_CONSTANTS;
    PROGRAM
    ' Настраиваемые параметры
    ClassCodeList=«SPBFUT» ' код класса инструмента

    INSTRUMENT =«SiH4» ' Задаем инструмент, внимательно указываем регистр у Si маленькая i, а у RI большая
    Interval=-1+0 ' интервал (таймфрейм) на графике
    OutFile = «c:\quotes.csv» ' файл, куда записывать данные в формате CSV
    DELETE_ALL_ITEMS()
    CurYear=get_value(GET_DATETIME(), «YEAR»)
    CurMonth=get_value(GET_DATETIME(), «MONTH»)
    CurDay=get_value(GET_DATETIME(), «DAY»)

    TextData=fTextData(CurYear,CurMonth,CurDay) &""
    TextTime=«100000»

    Candle=GET_CANDLE(ClassCodeList,Instrument, "", Interval & "", «PRICE», TextData, TextTime)
    Open=GET_VALUE (Candle, «OPEN»)+0
    if (Open>0)
    High=GET_VALUE (Candle, «HIGH»)+0
    Low=GET_VALUE (Candle, «LOW»)+0
    Close=GET_VALUE (Candle, «CLOSE»)+0
    Volume=GET_VALUE (Candle, «VOLUME»)+0
    output=CREATE_MAP()
    output=SET_VALUE(output,«DATE»,TextData)
    output=SET_VALUE(output,«TIME»,TextTime)
    output=SET_VALUE(output,«OPEN»,Open)
    output=SET_VALUE(output,«HIGH»,High)
    output=SET_VALUE(output,«LOW»,Low)
    output=SET_VALUE(output,«CLOSE»,Close)
    output=SET_VALUE(output,«VOLUME»,Volume)
    ADD_ITEM(CandleCount,output)
    WRITELN(OutFile, TextData & "," & TextTime & "," & Open & "," & High & "," & Low & "," & Close &"," & Volume )
    end if
    ' функция перевода даты в текстовый формат
    func fTextData(Year,Month,Day)
    if (LEN(Month) < 2)
    Month = «0» & Month
    end if
    if (LEN(Day) < 2)
    Day = «0» & Day
    end if
    result = Year & Month & Day
    end func
    END_PROGRAM
    PARAMETER Date;
    PARAMETER_TITLE Дата;
    PARAMETER_DESCRIPTION Дата;
    PARAMETER_TYPE STRING(30);
    END
    PARAMETER Time;
    PARAMETER_TITLE Время;
    PARAMETER_DESCRIPTION Время;
    PARAMETER_TYPE STRING(30);
    END
    PARAMETER Open;
    PARAMETER_TITLE Open;
    PARAMETER_DESCRIPTION Open;
    PARAMETER_TYPE NUMERIC(10,2);
    END
    PARAMETER High;
    PARAMETER_TITLE High;
    PARAMETER_DESCRIPTION High;
    PARAMETER_TYPE NUMERIC(10,2);
    END
    PARAMETER Low;
    PARAMETER_TITLE Low;
    PARAMETER_DESCRIPTION Low;
    PARAMETER_TYPE NUMERIC(10,2);
    END
    PARAMETER Close;
    PARAMETER_TITLE Close;
    PARAMETER_DESCRIPTION Close;
    PARAMETER_TYPE NUMERIC(10,2);
    END
    PARAMETER Volume;
    PARAMETER_TITLE Volume;
    PARAMETER_DESCRIPTION Volume;
    PARAMETER_TYPE NUMERIC(10,2);
    END
    END_PORTFOLIO_EX
    avatar
    DmitryAK, так попробуй, вообще нет отладчика под рукой, так что нарезал на глаз, может ругаться.
    avatar
    DmitryAK, Пишет произошла какая то ошибка, блинский блин!
    Замените соответствующую строку на
    Candle=GET_CANDLE(ClassCodeList,Instrument,"",-1, «PRICE»,TextData,0)
    И еще, очень рекомендую — замените множественные вызовы GET_DATETIME() на один.
    avatar
    Юрий Ч., Тоже ругается и ошибку выдает!((((((((((Что за язык то такой!
    Кавычки, наверное, неправильно прописались, поменяйте «PRICE» на кавычка PRICE кавычка, без пробелов. В коде DmitryAK тоже нужно кавычки поменять, и сделать TextTime=0, иначе не будет работать.
    avatar
    Юрий Ч., ЕЕЕЕЕЕЕССССССС!!! Заработало!
    Молодой поэт Таджикский, РЕБЯТА!!! ОГРОМНОЕ СПАСИБО, ВАМ!!! С НАСТУПАЮЩИМ НОВЫМ ГОДОМ!!!
    сделал в точности также как указали в комментариях, но все равно квик выдает ошибку. unknown identifier в строке 37. Если не трудно выложи пожалуйста исправленный код, который у тебя получился)

    теги блога Молодой поэт Таджикский

    ....все тэги



    UPDONW
    Новый дизайн