Блог им. gardist

В помощь рыбакам- невод на qpile.

    • 19 сентября 2017, 19:31
    • |
    • gardist
  • Еще

Суть скрипта — отслеживать резкие изменения цены.

1. Создайте каталог c:\Qpile — в нем будем хранить старую цену.
Создайте подкаталог c:\Qpile\GO — в нем будем хранить пойманные шпильки.
При наличии шпильки(гэпа) в подкаталоге GO будет создан файл с названием этого фюьчерса, это может быть удобно для дальнейших действий, скажем, можно запускать по планировщику заданий фaйл check.bat, который будет проигрывать мелодию:

@rem check.bat
dir «c:\Qpile\GO» /a-d >nul 2>nul && (
@ECHO Поймали шпильку
%WINDIR%\Media\tada.wav
) || (
@ECHO Ничего не поймали
)

2. Посмотрите код текущих фьючерсов (в таблице фьючерсов добавьте колонку Код бумаги)
Отредактируйте коды инструментов, укажите коды актуальных фьючерсов:

sINSTRUMENT_BRENT=«BRV7» ' код инструмента BRENT
sINSTRUMENT_GOLD=«GDU7» ' код инструмента GOLD
sINSTRUMENT_EURUSD=«EDU7» ' код инструмента EUR/USD

3. Настройте при каких параметрах выводить сообщения о шпильках
'Процент изменения цены при которой выводится оповещение:
sPrc_BRENT = 0.5
sPrc_GOLD = 0.2
sPrc_EURUSD = 0.4

4. Установите задержку обновления цены.
' Задержка:
NEW_GLOBAL(«sDELAY», 5)
(если при запуске скрипта стоит период расчета 10 сек. то значение 5 будет соответствовать примерно минуте).

5. Идем в Quik->Сервисы->Qpile скрипты->Добавить->Загрузить локально.
Кликаем на скрипт->Содать таблицу->Добавить все.

Как выглядит в Квике:

 В помощь рыбакам- невод на qpile.

Кросспост rffx.ru

P.S.:
(не разобрался как подтягивать коды фьючей автоматом, если кто знает — подскажите)
Код скрипта:

PORTFOLIO_EX SPIKE CATCHER;
DESCRIPTION Ловец шпилек;
CLIENTS_LIST  ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
 
PROGRAM
	 ' =========Пользовательские настройки=============
	 sCLASSCODE="SPBFUT" ' код группы

	 sINSTRUMENT_BRENT="BRV7" ' код инструмента BRENT
	 sINSTRUMENT_GOLD="GDU7" ' код инструмента GOLD
	 sINSTRUMENT_EURUSD="EDU7" ' код инструмента EUR/USD
 
	 'Файлы для хранения предыдущей цены:
	 sFile_BRENT = "C:\Qpile\"&sINSTRUMENT_BRENT&"_BID.txt"
	 sFile_GOLD = "C:\Qpile\"&sINSTRUMENT_GOLD&"_BID.txt"
	 sFile_EURUSD = "C:\Qpile\"&sINSTRUMENT_EURUSD&"_BID.txt"

	 'Файлы для хранения оповещения о гэпе:
	 sFile_BRENT_GO = "C:\Qpile\GO\"&sINSTRUMENT_BRENT&"_GO.txt"
	 sFile_GOLD_GO = "C:\Qpile\GO\"&sINSTRUMENT_GOLD&"_GO.txt"
	 sFile_EURUSD_GO = "C:\Qpile\GO\"&sINSTRUMENT_EURUSD&"_GO.txt"

	 'Процент изменения цены при которой выаодится оповещение:
	 sPrc_BRENT = 0.5
	 sPrc_GOLD = 0.2
	 sPrc_EURUSD = 0.4
	  ' ====================Переменные==================
        
	 ' Лучшая цена спроса
	 sPriceBid_BRENT = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_BRENT, "BID")
	 sPriceBid_GOLD = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_GOLD, "BID")
	 sPriceBid_EURUSD = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_EURUSD, "BID")

	 ' Лучшая цена предложения
	 sPriceOffer_BRENT = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_BRENT, "OFFER")
	 sPriceOffer_GOLD = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_GOLD, "OFFER")
	 sPriceOffer_EURUSD = 0 + GET_PARAM(sCLASSCODE,sINSTRUMENT_EURUSD, "OFFER")

	' Задержка:
	NEW_GLOBAL("sDELAY", 5)
	NEW_GLOBAL("sTIMER", 0)

         ' ===============СЕРВЕРНЫЕ ДАТА И ВРЕМЯ===============
         sSERVERDATE=GET_INFO_PARAM("TRADEDATE")  ' дата сервера в формате DD.MM.YYYY
         sSERVERTIME=GET_INFO_PARAM("SERVERTIME") ' время сервера в формате HH:MM:SS

	IF sTIMER < sDELAY
		sTIMER = sTIMER + 1
		RETURN
	END IF
	IF sTIMER >= sDELAY
		sOLD_PRICE_BRENT = READ_LINE(sFile_BRENT, GET_FILE_LEN(sFile_BRENT), "ERROR")
		sOLD_PRICE_PRC_BRENT=CEIL((100-((sOLD_PRICE_BRENT*100)/sPriceBid_BRENT))*100)/100
		sOLD_PRICE_PRC_ABS_BRENT=CEIL(ABS(100-((sOLD_PRICE_BRENT*100)/sPriceBid_BRENT))*100)/100

		sOLD_PRICE_GOLD = READ_LINE(sFile_GOLD, GET_FILE_LEN(sFile_GOLD), "ERROR")
		sOLD_PRICE_PRC_GOLD = CEIL((100-((sOLD_PRICE_GOLD*100)/sPriceBid_GOLD))*100)/100
		sOLD_PRICE_PRC_ABS_GOLD =CEIL(ABS(100-((sOLD_PRICE_GOLD*100)/sPriceBid_GOLD))*100)/100

		sOLD_PRICE_EURUSD = READ_LINE(sFile_EURUSD, GET_FILE_LEN(sFile_EURUSD), "ERROR")
		sOLD_PRICE_PRC_EURUSD =CEIL((100-((sOLD_PRICE_EURUSD*100)/sPriceBid_EURUSD))*100)/100
		sOLD_PRICE_PRC_ABS_EURUSD =CEIL(ABS(100-((sOLD_PRICE_EURUSD*100)/sPriceBid_EURUSD))*100)/100

         ' ===============ДАННЫЕ В ТАБЛИЦУ===============
    OUTPUT_BRENT=CREATE_MAP()
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"BID" , sPriceBid_BRENT)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"OFFER" , sPriceOffer_BRENT)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"OLD_PRICE" , sOLD_PRICE_BRENT)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"PRC" , sOLD_PRICE_PRC_BRENT)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERTIME" , sSERVERTIME)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERDATE" , sSERVERDATE)
    OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"INSTRUMENT" , sINSTRUMENT_BRENT)

    OUTPUT_GOLD=CREATE_MAP()
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"BID" , sPriceBid_GOLD)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"OFFER" , sPriceOffer_GOLD)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"OLD_PRICE" , sOLD_PRICE_GOLD)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"PRC" , sOLD_PRICE_PRC_GOLD)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"SERVERTIME" , sSERVERTIME)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"SERVERDATE" , sSERVERDATE)
    OUTPUT_GOLD=SET_VALUE(OUTPUT_GOLD,"INSTRUMENT" , sINSTRUMENT_GOLD)

    OUTPUT_EURUSD=CREATE_MAP()
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"BID" , sPriceBid_EURUSD)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"OFFER" , sPriceOffer_EURUSD)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"OLD_PRICE" , sOLD_PRICE_EURUSD)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"PRC" , sOLD_PRICE_PRC_EURUSD)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"SERVERTIME" , sSERVERTIME)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"SERVERDATE" , sSERVERDATE)
    OUTPUT_EURUSD=SET_VALUE(OUTPUT_EURUSD,"INSTRUMENT" , sINSTRUMENT_EURUSD)

    DELETE_ALL_ITEMS()

    ADD_ITEM(1,OUTPUT_BRENT)
    ADD_ITEM(2,OUTPUT_GOLD)
    ADD_ITEM(3,OUTPUT_EURUSD)

		'===========================РАСКРАСКА========================================
		'BRENT
		IF sOLD_PRICE_PRC_BRENT >0 AND GET_FILE_LEN(sFile_BRENT)>0
   		  'green
    		  SET_ROW_COLOR_EX(1, "RGB(157,241,163)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		ELSE
		  'red
		   SET_ROW_COLOR_EX(1, "RGB(255,168,164)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF
		IF sOLD_PRICE_PRC_BRENT == 0 AND GET_FILE_LEN(sFile_BRENT)>0
		  'transparent
    		  SET_ROW_COLOR_EX(1, "RGB(255,255,255)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF

		'GOLD
		IF sOLD_PRICE_PRC_GOLD >0 AND GET_FILE_LEN(sFile_GOLD)>0
   		  'green
    		  SET_ROW_COLOR_EX(2, "RGB(157,241,163)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		ELSE
		  'red
		   SET_ROW_COLOR_EX(2, "RGB(255,168,164)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF
		IF sOLD_PRICE_PRC_GOLD ==0 AND GET_FILE_LEN(sFile_GOLD)>0
		  'transparent
    		  SET_ROW_COLOR_EX(2, "RGB(255,255,255)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF

		'EURUSD
		IF sOLD_PRICE_PRC_EURUSD >0 AND GET_FILE_LEN(sFile_EURUSD)>0
   		  'green
    		  SET_ROW_COLOR_EX(3, "RGB(157,241,163)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		ELSE
		  'red
		   SET_ROW_COLOR_EX(3, "RGB(255,168,164)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF
		IF sOLD_PRICE_PRC_EURUSD==0 AND GET_FILE_LEN(sFile_GOLD)>0
		  'tansparent
    		  SET_ROW_COLOR_EX(3, "RGB(255,255,255)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
		END IF

		'==============================ОПОВЕЩЕНИЕ=========================================
		IF sOLD_PRICE_PRC_ABS_BRENT >= sPrc_BRENT  AND GET_FILE_LEN(sFile_BRENT)>0
			MESSAGE(sSERVERDATE&" "&sSERVERTIME&" Цена "&sINSTRUMENT_BRENT&" изменилась на:"&sOLD_PRICE_PRC_BRENT&" %",2)
			'orange
			SET_ROW_COLOR_EX(1, "RGB(255,151,33)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
			CLEAR_FILE(sFile_BRENT_GO)
			WRITE (sFile_BRENT_GO, "1")
		END IF

		IF sOLD_PRICE_PRC_ABS_GOLD >= sPrc_GOLD AND GET_FILE_LEN(sFile_GOLD)>0
			MESSAGE(sSERVERDATE&" "&sSERVERTIME&" Цена "&sINSTRUMENT_GOLD&" изменилась на:"&sOLD_PRICE_PRC_GOLD&"%",2)
			'orange
			SET_ROW_COLOR_EX(2, "RGB(255,151,33)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
			CLEAR_FILE(sFile_GOLD_GO)
			WRITE (sFile_GOLD_GO, "1")
		END IF

		IF sOLD_PRICE_PRC_ABS_EURUSD >= sPrc_EURUSD  AND GET_FILE_LEN(sFile_EURUSD)>0
			MESSAGE(sSERVERDATE&" "&sSERVERTIME&" Цена "&sINSTRUMENT_EURUSD&" изменилась на:"&sOLD_PRICE_PRC_EURUSD&"%",2)
			'orange
			SET_ROW_COLOR_EX(3, "RGB(255,151,33)", "DEFAULT_COLOR", "DEFAULT_COLOR", "DEFAULT_COLOR")
			CLEAR_FILE(sFile_EURUSD_GO)
			WRITE (sFile_EURUSD_GO, "1")
		END IF

		CLEAR_FILE(sFile_BRENT)
		CLEAR_FILE(sFile_GOLD)
		CLEAR_FILE(sFile_EURUSD)

		WRITE (sFile_BRENT, sPriceBid_BRENT)
		WRITE (sFile_GOLD, sPriceBid_GOLD)
		WRITE (sFile_EURUSD, sPriceBid_EURUSD)

	sTIMER = 0
	RETURN
	END IF

 
END_PROGRAM

PARAMETER OLD_PRICE;
PARAMETER_TITLE Старая цена;
PARAMETER_DESCRIPTION Старая цена;
PARAMETER_TYPE STRING(10);
END

PARAMETER PRC;
PARAMETER_TITLE Процент изменений;
PARAMETER_DESCRIPTION Процента изменений;
PARAMETER_TYPE STRING(10);
END
 

PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Текущая дата;
PARAMETER_TYPE STRING(10);
END
 
PARAMETER SERVERTIME;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Текущее время;
PARAMETER_TYPE STRING(10);
END
 
PARAMETER INSTRUMENT;
PARAMETER_TITLE Инструмент;
PARAMETER_DESCRIPTION Торгуемый инструмент;
PARAMETER_TYPE STRING(4);
END

PARAMETER BID;
PARAMETER_TITLE BID;
PARAMETER_DESCRIPTION Цена спроса;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER OFFER;
PARAMETER_TITLE OFFER;
PARAMETER_DESCRIPTION Цена предложения;
PARAMETER_TYPE NUMERIC(10,2);
END


 
END_PORTFOLIO_EX
 
  • Ключевые слова:
  • qpile
★28
5 комментариев
вот это я понимаю
avatar
А смысл ловить шпильки? все равно на хороших движениях твой терминал брокеры отключают и даже биржу))
avatar
А дельты нет для Quik?
avatar

Спасибо большое за то, что поделились своей разработкой!

avatar

Как подтягивать коды фьючей автоматом?

Я делал все просто (не знаю как вставить скрипт с сохранением отступа слева, поэтому получилось смазано, но смысл понятен):

1.Задавал инструмент (если инструментов много, то их помещают в цикл):
Seccode1 = «BR»
2.Вытягивал месяц:
dats = GET_INFO_PARAM («TRADEDATE»)
Mesyac0 = 0 + substr(dats,3,2)
3.Вытягивал последнюю цифру года:
God = 0 + substr(dats,9,1)
4.Запускал цикл, так как у некоторых инструментов экспирация 1 раз в 3 месяца:

'------------------

Mesyac = «A»   'Защита от ошибки, если месяц не подтянулся

for m from 1 to 4

if Mesyac0 = 1
Mesyac = «F»
end if

if Mesyac0 = 2
Mesyac = «G»
end if

if Mesyac0 = 3
Mesyac = «H»
end if

if Mesyac0 = 4
Mesyac = «J»
end if

if Mesyac0 = 5
Mesyac = «K»
end if

if Mesyac0 = 6
Mesyac = «M»
end if

if Mesyac0 = 7
Mesyac = «N»
end if

if Mesyac0 = 8
Mesyac = «Q»
end if

if Mesyac0 = 9
Mesyac = «U»
end if

if Mesyac0 = 10
Mesyac = «V»
end if

if Mesyac0 = 11
Mesyac = «X»
end if

if Mesyac0 = 12
Mesyac = «Z»
end if

'------------------

Seccode = Seccode1&Mesyac&God


'Получение значения количества дней до погашения из Таблицы текущих значений параметров

DAYS_TO_MAT_DATE_Seccode1 = GET_PARAM_EX (Classcode, Seccode, «DAYS_TO_MAT_DATE»)
DAYS_TO_MAT_DATE_Seccode1 = GET_VALUE(DAYS_TO_MAT_DATE_Seccode1,«PARAM_VALUE»)+0

if DAYS_TO_MAT_DATE_Seccode1<=0 and Mesyac0<12
Mesyac0 = Mesyac0+1
else
if DAYS_TO_MAT_DATE_Seccode1<=0 and Mesyac0=12 and God<9
Mesyac0 = 1
God = God +1
else
if DAYS_TO_MAT_DATE_Seccode1<=0 and Mesyac0=12 and God=9
Mesyac0 = 1
God = 0
end if
end if
end if

end for 'for m from 1 to 4

'------------------

avatar

теги блога gardist

....все тэги



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