<HELP> for explanation

Блог им. 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
 

купайл овно, как и сам квик, для начала попробуйте заменить строчку TextTime=fTextTime(CurHour,CurMin) & "" на TextTime=fTextTime(CurHour,CurMin,0) & ""
avatar

DmitryAK

DmitryAK, Не работает, гад такой! Я так понял, что опереатор Interval бывает от 0 до 60 и нужно как то DAY прикрутить, но у меня всё равно в таблицу ничего не выводится.
Молодой поэт Таджикский, вместо Interval=60 попробуйте Interval= -1 или Interval= «day»
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
DmitryAK, так попробуй, вообще нет отладчика под рукой, так что нарезал на глаз, может ругаться.
DmitryAK, Пишет произошла какая то ошибка, блинский блин!
Замените соответствующую строку на
Candle=GET_CANDLE(ClassCodeList,Instrument,"",-1, «PRICE»,TextData,0)
И еще, очень рекомендую — замените множественные вызовы GET_DATETIME() на один.
avatar

Юрий Ч.

Юрий Ч., Тоже ругается и ошибку выдает!((((((((((Что за язык то такой!
Кавычки, наверное, неправильно прописались, поменяйте «PRICE» на кавычка PRICE кавычка, без пробелов. В коде DmitryAK тоже нужно кавычки поменять, и сделать TextTime=0, иначе не будет работать.
Юрий Ч., ЕЕЕЕЕЕЕССССССС!!! Заработало!
Молодой поэт Таджикский, РЕБЯТА!!! ОГРОМНОЕ СПАСИБО, ВАМ!!! С НАСТУПАЮЩИМ НОВЫМ ГОДОМ!!!
сделал в точности также как указали в комментариях, но все равно квик выдает ошибку. unknown identifier в строке 37. Если не трудно выложи пожалуйста исправленный код, который у тебя получился)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UP