Молодой поэт Таджикский
Молодой поэт Таджикский личный блог
26 декабря 2013, 12:35

==** Помогите переделать скрипт на 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
15 Комментариев
  • DmitryAK
    26 декабря 2013, 12:50
    купайл овно, как и сам квик, для начала попробуйте заменить строчку TextTime=fTextTime(CurHour,CurMin) & "" на TextTime=fTextTime(CurHour,CurMin,0) & ""
      • DmitryAK
        26 декабря 2013, 13:11
        Молодой поэт Таджикский, вместо Interval=60 попробуйте Interval= -1 или Interval= «day»
    • DmitryAK
      26 декабря 2013, 14:19
      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
      • DmitryAK
        26 декабря 2013, 14:20
        DmitryAK, так попробуй, вообще нет отладчика под рукой, так что нарезал на глаз, может ругаться.
  • Юрий Ч.
    26 декабря 2013, 14:58
    Замените соответствующую строку на
    Candle=GET_CANDLE(ClassCodeList,Instrument,"",-1, «PRICE»,TextData,0)
    И еще, очень рекомендую — замените множественные вызовы GET_DATETIME() на один.
      • Юрий Ч.
        26 декабря 2013, 17:10
        Кавычки, наверное, неправильно прописались, поменяйте «PRICE» на кавычка PRICE кавычка, без пробелов. В коде DmitryAK тоже нужно кавычки поменять, и сделать TextTime=0, иначе не будет работать.
  • Алексей Айсберг
    28 января 2014, 14:40
    сделал в точности также как указали в комментариях, но все равно квик выдает ошибку. unknown identifier в строке 37. Если не трудно выложи пожалуйста исправленный код, который у тебя получился)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн