Робот QPILE. Золотая лихорадка

Продолжая тему приступим к разработке торгового робота на qpile.
Внизу можно будет скачать робота. Там же внизу представлены результаты месячного тестирования.

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

Самое интересное начинается с определения скользящей средней.

36
37
LASTPRICE_GD = get_param(ClassCodeList,Instrument,"last")
MA = MAnow("MA_GOLD") ' !!!!! График в Квике должен быть открыт, "идентификатор" - MA_GOLD

Идентификатор находится во вкладке Дополнительно.

Функция MAnow находится в файле с функциями. Пусть она немного устаревшая, но для решения задачи хватает. При желании её можно модифицировать.

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

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'---Проверяем, первый ли раз запустились и считываем последние данные из файла
' Вдруг мы уже запускали расчет. И чтобы повторно заявку не выставлять всё проверяем. 
' Или вдруг утром запустили, а со вчера сделка оставалась.'
IF first_start == 1
	vystavleno = str2num(READ_LINE (file_path, 1, error))
	ispolneno  = str2num(READ_LINE (file_path, 2, error))
	Cena       = str2num(READ_LINE (file_path, 3, error))
	order_key  = str2num(READ_LINE (file_path, 4, error))
 
	IF vystavleno == 1 AND ispolneno == 0
		n = GET_NUMBER_OF ("ORDERS")
		sovpadenie = 0
		FOR m FROM 1 TO n
			trade = GET_ITEM ("ORDERS", m)
			NUMBER = GET_VALUE (trade, "NUMBER") + 0
			IF order_key == NUMBER AND GET_VALUE (trade, "STATUS") == "ACTIVE"
				sovpadenie = 1
			END IF
		END FOR
 
		IF sovpadenie == 0
			ispolneno = 0
			vystavleno = 0
			WritePath (file_path, vystavleno, ispolneno, Cena, order_key)
		END IF
	END IF
 
first_start = 0
END IF
'----------------------------------------------------------

Дальше идет реализация самого алгоритма. Главными переменными на протяжении всего расчета робота являются vystavleno и ispolneno.
Собственно, если заявка не выставлена и не исполнена, то её надо выставить.

73
74
75
76
77
78
79
80
' Проверяем, выставлена ли заявка. Если нет, то выставляем '
IF vystavleno == 0 AND ispolneno == 0
	Cena = APPLY_SCALE(MA - Shag,1)
	send_order ("B",Cena,Lots,"1")
	vystavleno = 1
	order_key = APPLY_SCALE(OrderNumber,0) + 0
	WritePath (file_path, vystavleno, ispolneno, Cena, order_key)
END IF

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

83
84
85
86
87
88
89
IF vystavleno == 1 AND ispolneno == 0
	IF abs(MA - Cena - Shag) > Otklonenie
		send_order_kill ("1",order_key)
		vystavleno = 0
		WritePath (file_path, vystavleno, ispolneno, Cena, order_key)
	END IF
END IF

Один из ключевых моментов. Проверка, исполнилась заявка или нет. Если исполнилась, то меняем значение переменной ispolneno на единицу и записываем в лог-файл информацию о сделке.

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
IF vystavleno == 1 AND ispolneno == 0
	n = GET_NUMBER_OF ("ORDERS")
	FOR m FROM 1 TO n
		trade = GET_ITEM ("ORDERS", m)
		NUMBER = GET_VALUE (trade, "NUMBER") + 0
		IF order_key == NUMBER
			STATUS = GET_VALUE (trade, "STATUS")
			IF STATUS == "FILLED"
			   ispolneno = 1
			   vystavleno = 0
			   WritePath (file_path, vystavleno, ispolneno, Cena, order_key)
			   WriteLog (file_log, "Открыли LONG по GD", Cena)
			   Writeln (file_log, "--------------------")
			END IF
		END IF
	END FOR
END IF

Теперь осталось дождаться, когда цена вернется в исходное положение, т.е. в район скользящей средней ±Otklonenie и закрыть открытую ранее позицию.

111
112
113
114
115
116
117
118
119
120
IF vystavleno == 0 AND ispolneno == 1
	IF abs(MA - LASTPRICE_GD) < Otklonenie
		send_order ("S","0",Lots,"1")
		ispolneno = 0
		vystavleno = 0
		WritePath (file_path, vystavleno, ispolneno, Cena, order_key)
		WriteLog (file_log, "Закрыли LONG по GD", LASTPRICE_GD)
		Writeln  (file_log, "--------------------")
	END IF
END IF

Вот и всё. Торговый робот, который выставляет одну заявку и следит за её исполнением готов.
Аналогичная система, выставляющая веер заявок заработала за месяц примерно 70 долларов при максимальном гарантийном обеспечении 12000 рублей. Если учесть, что был ещё запас для изменения вариационной маржи, то доходность составила около 15%.
Скачать лог-файл: log_gold.txt

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

Скачать архив робота qpile: goldrush.rar

Данная механическая торговая система предлагается только для ознакомления. Все риски читатель берёт на себя. Я лишь делюсь своими наработками и исследованиями.


87 комментариев для “Робот QPILE. Золотая лихорадка”

  • Михаил
    23 Июль, 2009, 18:48

    Возникла проблема, не могу найти ответ.

    Вот код определения МА
    FUNC MAnow(MA_Name)
    Year = "" & (0 + get_value(GET_DATETIME(), "YEAR"))
    Month = "" & (0 + get_value(GET_DATETIME(), "MONTH"))
    Day = "" & (0 + get_value(GET_DATETIME(), "DAY"))
    Date = fTextData(Year,Month,Day) & ""
    Hour = GET_VALUE(GET_DATETIME(), "HOUR")
    Min = GET_VALUE(GET_DATETIME(), "MIN")
    Time = fTextTime(Hour,Min) & ""
    slice = Get_Candle_Ex (MA_Name, Date, Time)
    LineCount = 0 + Get_Value (slice,"COUNT")
    time = Get_Value (slice,"TIME")
    lines = Get_Value (slice,"LINES")
    FOR lineID FROM 0 TO LineCount-1
    line = Get_Collection_Item (lines, lineID)
    close_ma = 0 + Get_Value (line,"CLOSE")
    END FOR
    result = 0 + close_ma
    END FUNC

    Выдает ошибку в строке result, Название МА в программе и в Квике идентичны. Не знаете, где я не прав?

  • Михаил
    23 Июль, 2009, 18:55

    Так, с этим как то оч быстро разобрался, спс. Проблемы была в названии. Имя графику нужно присваивать в закладке дополнительно как идентификатор. Я думал, что достаточно просто обозвать график, так как нам нужно :)

  • Александр
    21 Сентябрь, 2009, 14:14

    Запустил программу мне пишет line39 Uknown error in statement [ MA > 0 ]

  • Александр
    21 Сентябрь, 2009, 14:19

    И вот еще что, пишет что не может понять result = close_ma в приложении func_gr

  • Александр
    21 Сентябрь, 2009, 14:25

    сообщение об ошибке line 132: Uknown identifier CLOSE_MA [RESULT = CLOSE_MA]

  • Юрий
    30 Сентябрь, 2009, 12:10

    Здравствуйте Иван! Подскажите пожалуйста, скачал Вашего робота, и переделал под URSI фьюч, т.к. у нас в тройке нельзя работать на золоте. Если не трудно, подскажите какие подставить значения цены и процентов. В отладчеке программа работает, а в реале стоит и нет продаж или покупок. Подскажите пожалуйста, при запуске портфеля в нем должны показываться какие либо значения, или данные появяться после каких то сделок?

  • Иван
    30 Сентябрь, 2009, 15:49

    Данные должны появиться сразу.
    Значения цены можете взять, например, 5 или 7, остальное можно не менять.
    График открыт? МА наложена и имеет правильный идентификатор?
    В файле с функциями значение торгового счета указано?

  • Юрий
    5 Октябрь, 2009, 16:12

    Здравствуйте Иван! SPBFUT небыл указан! Исправил, перезагрузил, останавливается в отладчике с формулировкой " Данный инструмент не найден UIZ9 "

  • Юрий
    5 Октябрь, 2009, 16:19

    а код клиент не надо?

  • Иван
    6 Октябрь, 2009, 8:02

    Нет. Код клиента на споте нужен. В каком месте останавливается?

  • Юрий
    6 Октябрь, 2009, 13:36

    Функция совершения транзакции (IF GET_VALUE (trans_result, "RESULT_EX") == "3" 'если транзакция выполнена) , вот досюда доходит и в начало (while = 0 'обнуление счётчика для бесконечности цикла) и так до бесконечности! В отладчике вот такой результат= (TRANS_PARAMS TRANS_ID=1;ACTION=NEW_ORDER;CLASCODE=SPBFUT;SECCODE=UIZ9;ACCUNT=SPBFUT001i1;OPERATION=B;PRICE=647.4;QUANTITY=1; TRANS_RESULT RESULT=0;RESULT_EX=5;ORDER_NUMBER=0.000000;DESCRIPTION=Указанный инструмент не найден "UIZ9";

  • Иван
    6 Октябрь, 2009, 22:38

    Проверьте ACCUNT. Должно быть ACCOUNT.
    Ну и на всякий случай давайте попробуем добавить:
    trans_params = set_value (trans_params, "CLIENT_CODE", "SPBFUT001i1")
    Поговаривают, что у некоторых брокеров требуется.

  • Юрий
    7 Октябрь, 2009, 13:48

    Здравстуйте Иван, робот на фьючерсах так и не раотает, но зато начал работать на акциях. Прописал под Лукоил (акции), и он зароботал, заявки выставляет, но покупок или продаж пока не произодит. Если Вам не трудно подскажите зачение цен и процентов под эту бумагу.

  • Юрий
    7 Октябрь, 2009, 14:09

    Иван поскажите, а робот в шорт умеет работать или только от лонга?

  • Юрий
    7 Октябрь, 2009, 14:48

    Время:
    Открыли LONG по GD по цене: 1713.8

    Время:
    Закрыли LONG по GD по цене: 1715.92

    вот первые показатели, значит работает, осталось настроить, вот еще я не понял, он похоже не купил, а не успел заявку переставить, так как рынок падал.

  • Юрий
    7 Октябрь, 2009, 19:42

    Все разобрался, в шорт не может, а приобрести полноценную программу у Вас можно?

  • Алексей
    14 Октябрь, 2009, 14:45

    Заметил одну вещь при использовании на демо-счете. Странное поведение скрипта. После работы в течении 5 минут цифры в таблице "застывают" происходит зависание. Лечится кнопкой "Начать расчет заного"
    В режиме отладки так и не смог понят на чем зависает.
    Может ктонибудь сталкивался с подобным поведением скрипта?

  • dachnik
    15 Октябрь, 2009, 9:58

    Интересно почему у меня если цена бумаги не меняется, то портфель не выполняется.

  • Misha
    19 Октябрь, 2009, 11:42

    Не совсем понятно как проводить отладку программы. Я не могу видеть все параметры функции в окне отображения параметров отладчика,так как там не достаточно места. Растянуть это окно нельзя.Скопировать строчку из отладчика тоже не получается.
    Как мне увидеть полный набор параметров функции?

    Спасибо.

  • Аноним
    19 Октябрь, 2009, 12:52

    Растянуть можно. + Можно изменять ширину столбцов..

  • Сергей
    21 Октябрь, 2009, 1:29

    Иван, подскажите откуда взять файл file_path с входными
    данными и что делает функция = str2num() ? Спасибо

  • Сергей
    21 Октябрь, 2009, 2:19

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

  • Алексей
    22 Октябрь, 2009, 8:05

    Разобрался почему зависает при некоторых условиях рынка и застывает цена.
    Скрипт зависает на ф-ции совершения транзакции, когда не может получить положительный результат после отправки транзакции и остается в FOR и гоняет ее... А причиной является резкое колебание цены в момент выполнения ф-ции. И возвращает ошибку, что не может цена отличаться от текщей на столько пунктов.. Одним словом нужно дописать защиту от проскальзования цены.

  • Misha
    22 Октябрь, 2009, 11:13

    Всем привет!
    Скажите пожалуйста. Как можно отладить программу вне рынка? Вне реал тайма. Есть каие нибуди средства, чтобы после рабочего дня проиграть его еще разок и просмотреть программу в пошаговом режиме... Я знаю мета сток помогает накапливать историю и работать с ней... ,но в метастоке отдельный язык написания кода... поэтому Программу из квика не получиться загнать в Метасток и отработать....
    Что делать? Спасибо !

  • 22 Октябрь, 2009, 11:39

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

  • Юрий
    22 Октябрь, 2009, 19:43

    Здравстуйте Иван! можно с Вами связатся по электронке?

  • Dmitry
    27 Октябрь, 2009, 18:37

    Подскажите, какие параметры MA вы используете и как вы их подбирали?

  • Алексей
    27 Октябрь, 2009, 18:44

    Иван, Ваш робот должен работать с одной заявкой?
    попробовал загрузить - бывает что не продав предыдущую покупку покупает еще - это ошибка или так должно быть и потом он постепенно распродаст все купленное?
    p.s. пытаюсь освоить qpile но не все еще в нем понимаю

  • Иван
    27 Октябрь, 2009, 21:40

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

    Алексей, так быть не должно. Либо Квик не отдал номер ордера в момент выставления и затем заявка не снялась, либо что-то ещё.
    Он не продал и выставил заявку с заданным отклонением или просто взял и купил?

  • Алексей
    28 Октябрь, 2009, 14:15

    робот переделан на сбер минутки.
    в момент резкого движения вниз идет покупка, затем еще и еще, что-то продает, что-то остается.

  • Dmitry
    29 Октябрь, 2009, 11:35

    Иван, не нашел ваших контактов на сайте, поэтому пишу здесь. Вы сейчас пишите программы на заказ на qpile?

  • Алексей
    29 Октябрь, 2009, 11:39

    Иван - в send_order_kill ("1",order_key) что означает "1"? и можно ли как еще убрать заявку?

  • Иван
    29 Октябрь, 2009, 12:15

    Алексей, "1" - это TRANS_ID. В файле func_gr.txt описана функция удаления заявки. Подробнее об этом можете почитать в руководстве пользователя.

  • Алексей
    29 Октябрь, 2009, 13:00

    спасибо

  • Dmitry
    29 Октябрь, 2009, 18:10

    Есть ли какие-либо примеры торговли (положительные и отрицательные) по такой схеме, кроме лога тех летних дней на золоте? Я написал скрипты для оптимизации, тестировал только на RI - показывают большие просадки на счете, когда прайс долго не возвращается к MA...

  • Алексей
    29 Октябрь, 2009, 18:58

    Иван - возвращаясь к теме выставления дополнительных заявок на покупку. взял архив робота, поправил след.моменты:
    1. в файле func.gr поменял account
    2. в файле goldrush.qpl поменял:instrument - на SRZ9, slippage -на 1,
    shag- на 10, otklonenie-на 1, ma - на ma=manow("ma_SRZ9")
    в блоке проверки выставлена ли заявка заменил
    Cena = APPLY_SCALE(MA - Shag,1) на Cena = APPLY_SCALE(MA - Shag,0)
    запускаю на сбере 1 минута ma 3, обновление портфеля пробовал от 1сек
    до 15 - везде при сильном движении в любом направлении ставит новые заявки забыв снять старые. проверял на разных брокерах.

  • Иван
    29 Октябрь, 2009, 23:41

    Dmitry. Я рассматривал несколько вариантов, самым лучшим оказалось золото, т.к. именно там наиболее часто случаются выбросы (шипы, тени) и именно на это расчет. На других инструментах большая ликвидность и такой алгоритм не эффективен.

  • Иван
    29 Октябрь, 2009, 23:43

    Алексей, завтра попробую.

  • Иван
    30 Октябрь, 2009, 11:27

    В общем, проверил. Указанной проблемы не обнаружил. При движухе заявки снимаются. Но происходит всё очень часто.
    Советую поставить отклонение на 5, шаг на 20 (для начала). И проверьте, пожалуйста, вот что - когда заявка выставлена посмотрите, стоит ли номер заявки в файле ind_gr.txt. Что-то мне подсказывает, что где-то теряются номера выставленных заявок. Проверьте путь к этому файлу в скрипте.

  • Алексей
    30 Октябрь, 2009, 12:49

    Иван - я специально такие экстремальные значения ставлю, чтобы понять где сбой.
    сейчас минут 20 смотрел внимательно - после каждого выставления заявки или ее исполнения просматривал файл ind_gr.txt
    в штатном режиме все пишется правильно, но иногда после исполнения покупки пишет первые две строки 00, хотя должен писать 01, бывает даже без исполнения записано 00, хотя заявка стоит. не пойму, то ли ошибка в записи, то ли в чтении из файла.
    разок показалось что номер заявки был из середины таблицы, а не из конца, в остальных случаях номер был последним

  • Алексей
    30 Октябрь, 2009, 13:33

    поставил в блок где проверяется отклонение и убивается заявка проверку действительно ли заявка убита и только после этого vystavleno=0
    теперь не сбоит. хотя конечно интересно где затык- в коде функции снятия заявки,в общем каркасе программы или же в выполнении квиком команд

  • Иван
    30 Октябрь, 2009, 13:53

    Да, в Квике всё так и надо делать - по сто раз проверять :)

  • Александр
    8 Ноябрь, 2009, 16:40

    Программа не видит графика. (Идентификатор указан правильно. Последнюю цену бумаги - программа определяет.) В чем может быть причина?

  • Александр
    8 Ноябрь, 2009, 20:22

    Вопрос снимается. Работал на эмуляторе. Он вместо текущей даты (08/11/09) подставлял 06/11/09

  • Александр
    9 Ноябрь, 2009, 0:20

    Почему такой алгоритм: сначала (в любому случае) выставляем заявку, а уже потом проверяем и тут же ее отменяем (если не то).
    Не проще ли выставлять заявку (при условии). Тогда и "убивать" ее не придеться?

  • Александр
    9 Ноябрь, 2009, 0:31

    Еще вопрос: Почему в лог-файлы ничего не пишется.
    Остаются пустые, а если их вообще удалить - сами не создаются. (Сделки при этом проходят)

  • 9 Ноябрь, 2009, 17:54

    Прочитайте ещё раз http://www.selftrade.ru/strategies/zolotaya-lixoradka/
    Если выставлять заявку по факту она скорее всего останется висеть на долго, цена уже вернется назад.
    Проверьте пути до файлов.

  • Александр
    10 Ноябрь, 2009, 9:52

    Вы написали, что "Функция MAnow... Пусть она немного устаревшая, но для решения задачи хватает. При желании её можно модифицировать" Подскажите "куда подумать" (в каком направлении можно ее доработать).? Какие у нее недостатки?

  • Алексей
    10 Ноябрь, 2009, 16:07

    Иван - не подскажете в чем загвоздка?
    msg=GET_CANDLE("SPBFUT","RIZ9","OPEN",5,1,20091110,153000)
    MESSAGE(msg,2)
    выдает пустоту
    если вместо open ставим пустые кавычки - выдает open close high low volume
    пример взят из рук-ва пользователя стр. 8:58

  • Алексей
    10 Ноябрь, 2009, 17:41

    Иван - вопрос отпал -разобрался наконец!!!

  • Иван
    10 Ноябрь, 2009, 19:45

    Функция MAnow определяет значение СС в текущий момент времени, но так бывает, что значения нет. Это случается когда в следующий период времени не было сделок и график не "подвинулся" в наше время. Такое часто происходит утром.
    Тут можно двигаться во времени назад и проверять наличие значений, есть они или нет. Первое существующее брать за истину.

  • Александр
    13 Ноябрь, 2009, 10:30

    Подскажите с выводом информации в файл. Пути указаны правильно. Но видимо у меня что-то не так. Информация в файлах не меняется никак. Как найти ошибку? Второй вопрос: Может ли программа СОЗДАТЬ сама файл (если он отсутствует в каталоге) при выполнении одной из функций работы с файлами?

  • Иван
    13 Ноябрь, 2009, 12:51

    Создать сама может.
    Есть ли у вас права на запись в указываемую директорию?

  • Аноним
    17 Ноябрь, 2009, 0:55

    Права есть.
    Могу сам править этот файл. Программа в целом работает. Совершает все транзакции, но на файлы никакого влияния не оказывает вообще. Может быть это из-за того, что я работаю в QUIKJunior (5.15.0.69 версия)?

  • Александр
    17 Ноябрь, 2009, 1:15

    Ошибку нашел (с файлом). Неверная буква в названии пути файла. Спасибо за моральную поддержку :)

  • Иван
    17 Ноябрь, 2009, 16:49

    Поздравляю :)

  • Аноним
    17 Ноябрь, 2009, 17:08

    сообщение об ошибке line 132: Uknown identifier CLOSE_MA [RESULT = CLOSE_MA]
    вот тоже самое, ниче немогу сделать, осталось проверить
    (В файле с функциями значение торгового счета указано?
    ) вот это, только где его искать???? мозг стоит раком, помогите пожалуста.

  • Иван
    17 Ноябрь, 2009, 20:27

    Время в Квике не совпадает со временем компьютера мне кажется.

  • achidutsu
    18 Ноябрь, 2009, 4:07

    Здравствуйте, Иван. Немного не в тему может быть вопрос. А нет ли у кого-нибудь из брокеров онлайн-сервиса, дающего в реалтайме все необходимые данные по какому-нибудь протоколу и позволяющего выставлять заявки, чтобы писать роботов на нормальных языках программирования, используя свой секретный ключ, а не заниматься ездой на льду :). Сам квик ведь общается с сокет-сервером по какому-то протоколу. Найти его (протокола) спецификацию нереально, как понимаю? Ни у кого из разработчиков механических систем такой вопрос не возникал? Было бы интересно услышать Ваше мнение по данному вопросу.

  • Иван
    18 Ноябрь, 2009, 11:28

    Так с ходу могу назвать только альфадирект и айтиинвест. Это те брокеры, у которых не используется quik и анонсируется, что можно творить чудеса напрямую с сервером, но на самом деле там свой софт. У китов (может и ещё у кого) есть услуга типа "сервер доступа", сокращающая время отклика. Но и здесь quik.
    Ну а в принципе, писать можно на любом языке. В quik заявки отправлять можно несколькими способами, включая импорт транзакций.
    Не для скальпинга этого всего хватает.
    На официальном сайте можно модули посмотреть. Но все дополнительные фишки стоят денег.

  • Михаил
    19 Ноябрь, 2009, 12:20

    Сообщение об ошибке "File: func_gr.txt, line: 132. Uknown identifier CLOSE_MA [RESULT = CLOSE_MA]" . Видимо неверно расчитывается значение скользящего среднего т.к. цикл в котором идет расчет переменной CLOSE_MA даже не начинается , и похоже это из-за параметров графика , хотя идентификатор графика MA_GOLD задан правильно. Какие должны быть остальные параметры графика?

  • игрок
    19 Ноябрь, 2009, 14:49

    Теперь нашел ошибку.Ваш робот грузится но не работает.
    и на втб пож-та что изменить подробно.какие значения лучше.

  • Павел
    27 Ноябрь, 2009, 21:07

    Иван, добрый вечер.
    Пытаюсь разобраться с Qpile на прмере Вашего робота.
    Возникли следуюзие проблемы:
    1) После загрузки портфеля и просмотре таблицы, данные не выводятся;
    2) При пошаговой отладке, вычисляется значение время и дата, закрытие MA, но не считается LASTPRICE_GD.
    Что можно сделать ?

  • Иван
    28 Ноябрь, 2009, 1:42

    Приветствую, Павел.
    Попробуйте в строке:
    LASTPRICE_GD = get_param(ClassCodeList,Instrument,"last")
    заменить last на LAST.
    Ну и подробностей бы побольше.

  • Павел
    28 Ноябрь, 2009, 11:47

    Иван, добрый день.
    С получение LASTPRICE_GD разобрался, - необходимо было создать в Квике Таблицу текущих параметров RIZ9, он берет оттуда переменную last.
    А вот с выводом данных в реальном времени в таблицу портфеля пока не получается.
    Счет реальный, везде указал его код, все равно не выдает данные в таблицу. В режиме отладки вычисляет спред.

  • Сергей
    29 Ноябрь, 2009, 4:12

    Здравствуйте, Иван.
    Не могли бы Вы внести ясность по роботу Ева, сделавшей на конкурсе 08 года 6000 % ? Это что-то уникальное, или любой робот способен на подобные подвиги? Спасибо.

  • Сергей из Чебоксар
    29 Ноябрь, 2009, 10:46

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

  • Павел
    29 Ноябрь, 2009, 11:59

    Иван, приветствую.
    Возник следующий вопрос: есть ли в Qpile функция delay (time) ?
    Чтобы программа могла сделать паузу в работе на указанное время ?

  • Pasha
    29 Ноябрь, 2009, 12:46

    Молодец! Я тоже написал подобного робота.
    Если в начале торговли купить опцион, кол и пут с одним страйком, то не понадобится ГО под фьючерс, только под маржу. Конечно покупка опциона это убыток, зато общее необходимое ГО снижается в несколько раз, тем самым увеличивая процент прибыли. Я роботов Qpile пишу уже полтора года в свободное от работы время. Пока не разбогател, но уверен в успехе. Можно объединить усилия. Пиши мне.

  • Иван
    30 Ноябрь, 2009, 22:19

    Павел, функцию задержки обсуждали тут: [это ссылка]
    Pasha, обязательно пообщаемся!

  • Павел
    2 Декабрь, 2009, 20:58

    Иван, приветствую!
    Функцию задержки реализовали таким же методом.
    Известно ли Вам, как можно увеличить частоту обращения (вызов) портфеля. Стандартный работате примерно раз в 5 секунд ????

  • Иван
    3 Декабрь, 2009, 12:11

    Делайте секунду, оптимизируйте код.

  • Павел
    3 Декабрь, 2009, 21:00

    Сегодня закончил тестирование и отладку свечной МТС (Qpile),
    с завтрашнего дня запускается на реальный счет )).

  • 3 Декабрь, 2009, 21:33

    Ждём результатов :)

  • Никита
    21 Февраль, 2010, 15:19

    Здравствуйте, Иван !) Выражаю, вам, большую благодарность за создание данного ресурса. Очень помог в познании языка QPILE. Интересует вопрос:

    Shag = 0.01 ' Шаг отступа от МА в долларах'
    Otklonenie = 0.01 ' Возможное отклонение в долларах для модифицирования заявки '

    Почему отступ рассчитывается именно в долларах?работаю на ММВБ инструмент SBER03

  • Иван
    24 Февраль, 2010, 12:27

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

  • Александр
    26 Февраль, 2010, 11:20

    Вопрос автору: Используете ли вы данного робота (возможно и модифицированного) в реальной работе?

  • Артем
    15 Март, 2010, 14:55

    Что и где в коде нужно поменять что бы настроить робота под свой счет и под  "свой" инструмент?

  • Артем
    15 Март, 2010, 14:56

    Что и где в коде нужно поменять что бы настроить робота под свой счет и под  "свой" инструмент???

  • Аноним
    17 Апрель, 2010, 15:04

    to Артем->
    В функции исполнения заявки send_order укажи свои параметры
    trans_params = set_value (trans_params, "CLASSCODE", ClassCodeList)
    trans_params = set_value (trans_params, "SECCODE", Instrument)
    trans_params = set_value (trans_params, "ACCOUNT", account)

  • Изя Шниперсон
    17 Апрель, 2010, 15:10

    Иван, при работе программы иногда возникают проблемы на шаге закрытии позиции:
    Условие: цена последней сделки - МА < отклонения - выполнено,
    но при закрытии LONG цена закрытия оказывается выше цены открытия.
    Предлагаю улучшить программу на этом шаге следующим образом:
    брать лучшее предложение цены покупки из стакана и если это предложение минус МА меньше отклонения - закрывать позицию.

  • Konstantin
    18 Апрель, 2010, 17:35

    Эм,  а почему вот это:

    "Проверяем, первый ли раз запустились и считываем последние данные из файла' Вдруг мы уже запускали расчет. И чтобы повторно заявку не выставлять всё проверяем. ' Или вдруг утром запустили, а со вчера сделка оставалась"

    Не делать по открытым таблицам, т.е. не смотреть наличие заявок в "таблице заявок" и позу в "таблице лимитов по бумагам"?

  • Игорь
    20 Июль, 2010, 18:07

    Здравствуйте! Иван, вопрос к Вам... Скачал скрипт, установил (на QUIK-Junior, учебный счет), все наладил, все работает... Инструмент LKOH на ММВБ, график считывается(минутный), заявки выставляются/снимаются/"передвигаются"... Вроде все ОК, но... Торговля идет в обратную сторону, "на убыток", почему-то! Вот скриншот таблицы заявок: [это ссылка] ... В чем может быть проблема?

  • Игорь
    20 Июль, 2010, 18:14

    Иван, прошу прощения! Ссылка на скриншот таблицы заявок в предыдущем комментарии не работает, вот новая ссылка: [это ссылка]

  • Александр
    2 Сентябрь, 2010, 16:39

    Иван, как с вами можно связаться?

  • Anton
    14 Октябрь, 2010, 19:38

    Добрый день!
    указал
    ClassCodeList = "EQBR" ' код класса инструмента
    Instrument = "SBER03" ' название инструмента
    Открыл график для этого инструмента, добавил на него Среднюю скользящуюю MA назвал MA_GOLD
    Загружаю робота. затем нажимаю ctrl+f12 выбираю портфель выбираю все колонки и нажимаю да. он мне сразу выдает ошибку:
    line 132: Uknown identifier CLOSE_MA [RESULT = CLOSE_MA]

    Подскажите пожалуйста что я делаю не так...

    Заранее спасибо!

  • Дмитрий
    23 Ноябрь, 2010, 21:35

    Здравствуйте!

    В график робота индикаторы вставлять надо или нет?
    Если надо то какие?

    Спасибо!