Автор: Николай Камынин

Учитывая, указанные ранее  ограничения, рассмотрим примеры функций из библиотеки автора:

БИБЛИОТЕКА ФУНКЦИЙ NK

Функции преобразования даты и времени:

FUNC DateTimeSesLoc() ‘определение даты сессии локального времени и текущей даты

MAP=GET_TRADE_DATE () ‘дата торговой сессии

Y_M_D1() ‘распаковка даты торговой сессии

DateTrade=DATE(YEAR,MONTH,DAY) ‘дата торговой сессии в формате YYYYMMDD

MAP=GET_DATETIME ()  ‘текущая дата и время

Y_M_D()  ‘распаковка текущей даты

DateLast=DATE(YEAR,MONTH,DAY) ‘дата в формате YYYYMMDD

H_M_S()  ‘распаковка текущего времени

T=0+TIME(HOUR,MIN,SEC‘текущее время в формате hhmmss

LOCALTIME=GET_INFO_PARAMLOCALTIME«)    ‘локальное время компьютера hh:mm:ss

Time_ID=0+HMS(LOCALTIME‘время hh:mm:ss в hhmmss будем использовать как код транзакции

‘—————

END FUNC

‘——————————

FUNC Y_M_D1()  ‘распаковка даты

YEAR=GET_VALUE(MAP, «YEAR»)

MONTH=GET_VALUE(MAP, «MONTH»)

DAY=GET_VALUE(MAP, «DAY»)

DW=GET_VALUE(MAP, «DAYOFWEEK»)

END FUNC

‘——————————

FUNC Y_M_D()  ‘распаковка текущей даты

Y_M_D1()  ‘распаковка даты

DW=GET_VALUE(MAP, «DAYOFWEEK«)

DD_MM_YYYY=GET_VALUE(MAP, «DATETIME»)

DateLastString=SUBSTR (DD_MM_YYYY, 6,4) & SUBSTR (DD_MM_YYYY, 3,2) & SUBSTR (DD_MM_YYYY,0,2) 

END FUNC

‘——————-

FUNC H_M_S()  ‘распаковка текущего времени

HOUR=GET_VALUE(MAP, «HOUR»)

MIN=GET_VALUE(MAP, «MIN»)

SEC=GET_VALUE(MAP, «SEC»)

‘MLS=GET_VALUE(MAP, «MILLISEC»)

END FUNC

‘——————-

FUNC HMS(LTime‘распаковка времени из формата hh:mm:ss в формат hhmmss

result=SUBSTR (LTime,0,2) & SUBSTR (LTime, 3,2) & SUBSTR (LTime, 6,2)

END FUNC

‘——————-

FUNC Y_M_D_H_M(LDat‘распаковка текущего времени

Y_M_D(LDat)  ‘распаковка текущей даты

H_M_S(LDat)  ‘распаковка текущего времени

END FUNC

‘——————-

FUNC DATE(YEAR,MONTH,DAY )  ‘дата в формате YYYYMMDD

  result=(YEAR*100+MONTH)*100+DAY

END FUNC

‘——————-

FUNC TIME(HOUR,MIN,SEC )      ‘время в формате hhmmss

 result=(HOUR*100+MIN)*100+SEC 

END FUNC

‘——————-

FUNC DecrTIME(HHMMSS,STEP )  ‘перевод назад на STEP минут, вывод hhmmss

HM1=FLOOR (HHMMSS/100)

H1=FLOOR (HM1/100)

M1=HM1-H1*100

S1=HHMMSS-100*(H1*100+M1)

S1=H1*3600+M1*60+S1- STEP*60

IF S1>0

result=SEC_TO_HHMMSS(S1)

ELSE

result=0

END IF

END FUNC

‘——————-

FUNC IncTIME(HHMMSS,STEP )  ‘перевод вперед на STEP минут, вывод hhmmss

HM1=FLOOR (HHMMSS/100)

H1=FLOOR (HM1/100)

M1=HM1-H1*100

S1=HHMMSS-100*(H1*100+M1)

S1=H1*3600+M1*60+S1+STEP*60

result=SEC_TO_HHMMSS(S1)

END FUNC

‘——————

FUNC SEC_TO_HHMMSS(TimeToSec)        ‘перевод из секунд в формат HHMMSS

TEMP=TimeToSec

H2=FLOOR (TEMP/3600)

MS2=TEMP-H2*3600

M2=FLOOR (MS2/60)

S2=MS2-60*M2

 result=(H2*100+M2)*100+S2 

END FUNC

‘————

FUNC HHMMSS_TO_MIN(HHMMSS)        ‘перевод времени из HMMSS в минуты

H2=FLOOR (HHMMSS/3600)

MS2=HHMMSS-H2*3600

M2=FLOOR (MS2/60)

 result=H2*60+M2 

END FUNC

 

Tags: ,

Автор: Николай Камынин

            В широко используемом торговом терминале QUIK есть встроенный интерпретатор языка QPILE. Изначально этот язык предназначался для программирования таблиц, в которых отображается состояние активов клиента.

            Однако, в настоящее время данный язык используется для написания торговых роботов.

        QPILE имеет особенности и ограничения.

    Однако,учитывая эти особенности можно программировать практически любые стратегии.

     Тот факт, что программа не компилируется, а выполняется интерпретатором приводит к существенной потере быстродействия.

            Первой особенностью языка является наличие фактически лишь двух форматов данных –DOUBLE  и STRING, с плавающей точкой и строковых соответственно.

       В языке отсутствуют операторы явного преобразования форматов. При этом, если в операторе сравнения участвуют операнды разных форматов, то интерпретатор выдает ошибку.

    Поэтому разработчики рекомендуют для гарантированного получения числовых операндов складывать их с нулем. Часто вместо числового операнда получается строковый при извлечении значения из ассоциативного массива.

         Второй особенностью QPILE является отсутствие областей видимости  переменных.

            В обычных языках программирования можно в различных функциях обозначать различные внутренние переменные одинаковым именем. В QPILE область видимости любой переменной – вся программа. Кроме того, максимальное число переменных не может быть более 1000.

        Данное ограничение приводит к тому, что нет практического смысла вводить формальные переменные при создании функций, так как это приводит лишь к замедлению выполнения программы.

      Существенным ограничением программы на QPILE является отсутствие программных средств для ввода информации в программу с клавиатуры, что исключает возможность диалога с торговым роботом. 

        Поэтому роботов, созданных с помощью  QPILE, я классифицирую как  автоматические устройства на “жесткой логике”.

     Следующей особенностью QPILE является время жизни переменных. Если переменная определена как GLOBAL, то время жизни равно времени работы программы.

Определения такой переменной выполняется оператором  NEW_GLOBAL(“Y”, 10) – определяет переменную Y с начальным значением 10. Оператор NEW_GLOBAL(“X”, CREATE_MAP ())  определяет ассоциативный массив с именем X.

           Время жизни других переменных определяется одним циклом выполнения программы. При каждом новом цикле исполнения программы, переменные не определенные как GLOBAL будут определяться снова с присвоением начальных условий. Переменные , определенные как GLOBAL будут сохранять свои значения, полученные ими в прошедшем цикле.

            Для программирования механических торговых систем (МТС) или торговых роботов рекомендую разработать библиотеку программ.

Tags: , ,

Автор: Николай Камынин

В Интернете можно найти много восторженных статей об экономической эффективности получения биогаза в качестве источника возобновляемой и дешевой энергии.
Приводятся завораживающие цифры, о том, как, переработав все отходы сельского хозяйства в РФ, можно получить объем газа равный объему экспорта Газпрома.
Попробуем оценить реальную экономическую эффективность производства биогаза из органических отходов.
Для примера рассмотрим эффективность производства биогаза из навоза крупного рогатого скота (КРС).
Известно, что из 1 кг сухого вещества навоза КРС можно теоретически получить от 0.25 до 0.34 м3 биогаза с содержанием метана 65%. При переработке свиного навоза содержание метана может уменьшится до 30%.
Примем для расчета объем произведенного из 1 кг СВ 0.3 м3 биогаза или в пересчете на чистый метан (природный газ) получим 0.2 м3.
Стоимость реализации природного газа в РФ в 2009 году составляла 60 долларов США за 1000 м3.
Для эффективной переработки органических отходов в биогаз, влажность загружаемых в биореактор отходов должна быть не менее 95%.
Это означает, что на 1 кг сухого вещества необходимо добавить 20 литров воды, что и определит объем загружаемого в биореактор жидкого навоза.
Полный цикл переработки 1 кг сухого вещества в биогаз составляет примерно 16 дней.
Кроме того, загрузка реактора не может быть больше 80%.
Это означает, что объем биореактора для ежедневной загрузки 1 кг СВ должен быть в 20 раз больше объема загружаемого ежедневно жидкого навоза.
Из полученного объема газа, примерно 20% будет затрачено на обогрев биореактора.
Таким образом, для получения в сутки 1 м3 метана на продажу требуется биореактор объемом 20×20/1000/0.2=2 м3.
По данным о практической реализации биореакторов, например в Лахольме (Швеция) , для производства товарного метана из навоза КРС в объеме 1м3 требуется биореактор объемом 4 м3, что примерно в два раза больше, чем полученная теоретически оценка.
Удельная стоимость биогазовых установки, рекламируемых в интернете составляет от 1250 (для биореактора в 5 м3) до 300 долларов США (для биореактора в 100 м3 ) в пересчете на м3 биореактора. При этом стоимость в 1200 долларов/м3 относится к маломощным установкам.
Таким образом, затраты на создание производства 1 м3 метана в сутки из навоза КРС составят от от 500 до 2500 долларов США.
Попробуем оценить стоимость строительства биогазовой установки другим методом. Биореактор , входящий в состав биогазовой установки составляет примерно 40% стоимости установки.
По своей сути это железобетонное или металлическое сооружение. Так реактор 100 м3 при высоте 3 метра будет иметь площадь основания 30 м2. Стоимость строительства при существующих расценках составит не менее 1000 долларов за м2, что в пересчете на м3 составляет 30*1000/100=300 долларов. Тогда стоимость биогазовой установки в пересчете на м3 составит 300/0.4=750 долларов, что несколько выше указанной ранее цены.
За год эксплуатации данного оборудования с объемом биоректора в 2 м3 будет произведено 365 м3 метана.
При реализации полученного газа по цене природного, доход составит 60*365/1000=22 доллара США.
Таким образом, срок окупаемости данного производства без учета налогов и производственных затрат составит для маломощных установок 2500/22=112 лет.
Для мощных установок этот срок сократится и составит 500/22 =22 года.
C учетом производственных затрат, налогов, затрат на ремонт, стоимости инвестируемых средств, срок окупаемости составит не менее 200 лет и 40 лет, соответственно.
В официальных оценках сроков окупаемости крупных европейских проектов с объемом реакторов в десятки тысяч м3, реализованных при государственном финансировании составляет порядка 15 лет, что для российских условий составит не менее 20 лет.
Таким образом, строительство установок по производству биогаза является экономически убыточным мероприятием, особенно для мелких фермерских хозяйств, а информация производителей оборудования для получения биогаза, как об источнике дешевой энергии, является очередным рекламным мифом.