Просмотр сообщений
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Messages - Termvsrobo
1
« on: Апреля 30, 2014, 10:54:58 am »
Есть ли смысл и возможность дать народу возможность развивать ATF? Со многими продуктами были подобные истории. Например, OpenOffice -> LibreOffice после того, как была куплена SunMicroElectroniks
2
« on: Апреля 29, 2014, 09:06:13 am »
Ну я честно говоря не путаю. Согласен, это плохой тон программирования, но просто в голове держу OP_BUY = 1.
3
« on: Апреля 29, 2014, 09:03:30 am »
Ну вы нам дайте знать, когда работа по развитию и поддержке ATF будет остановлена. Чтобы быть в курсе.
4
« on: Апреля 29, 2014, 07:58:48 am »
Я думаю, что в большинстве умов под закрытием проекта понимается пункт №3, поэтому так и реагируем.
5
« on: Апреля 28, 2014, 12:59:37 pm »
6
« on: Апреля 28, 2014, 12:54:40 pm »
OP_BUY - это константа, равная 1.
7
« on: Апреля 28, 2014, 12:38:16 pm »
Т.е. событие onTrade вызывается несколько раз для одного и того же id? Даже если и так. Почему не запрещается по условию запрета. Ведь еще перед самым выполнением кода выставления заявки стоит обнуление флага, а значит в след раз не должен выполниться код. А он у меня почему то выполняется, когда выставленный стоп-лосс исполняется.
8
« on: Апреля 28, 2014, 12:36:07 pm »
Тогда выше указанная функция и собственные сигналы сообщений. Сигналы очень полезны для отладки. Поэтому рекомендую их осваивать.
9
« on: Апреля 28, 2014, 12:23:54 pm »
файл называется Events.log. Либо еще можно пользоваться функцией signal::alertMultiple(getLastErrorMessage). Она будет выводить текст ошибок.
10
« on: Апреля 28, 2014, 12:19:37 pm »
Тоже вариант. Но хочется понять как вызывается функция onTrade. Если мою проблему решить выше изложенным способом, то тогда зачем нужен обработчик события onTrade?
11
« on: Апреля 28, 2014, 12:07:58 pm »
Ну как вариант можно лог файлы смотреть.
12
« on: Апреля 28, 2014, 11:47:40 am »
Вот написал такой код
#line 0 solid red
extern kol_punktov = 15; extern kol_lotov = 3; extern step =0.01;
var trend1; var trend2; var i = 0;
function init() { setInitCandles(10); setBounds(0, 10, 0); }
function checkAction() //Определяем наличие активных заявок { var NewArray = new_object("array"); //Определяем количество обычных активных заявок NewArray = getActiveOrderIDs(); var NewArray2 = new_object("array"); //Определяем количество активных стоп-заявок NewArray2 = getActiveStopOrderIDs(); var n = NewArray.size()+NewArray2.size(); return n; }
function calc()
{ trend1 = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0] - IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-1]; //Определяем направление тренда trend2 = IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-1] - IndRef("macdhistogram", 12, 26, 9, ind_ema, ind_ema, ind_ema, pt_close)[0][-2]; line[0] = trend1; //Для графического представления строим линию checkAction(); var t = checkAction(); line[1] = 0.01; line[2] = -0.01; line[3] = trend2; //i = 0; if (t == 0) { if (trend1>0.01 and trend2>0.01) { //signal::outputMultiple(OP_BUY); //signal::outputMultiple(OP_SELL); signal::outputMultiple("i="+i); i = OP_BUY; signal::outputMultiple("i="+i); trade_action::buyMultiple(kol_lotov, ::lots, close); signal::outputMultiple(getLastErrorMessage()); } else { signal::output("Тренды меньше 0,01. Событие calc()"); } } } function onTrade(var id) { signal::outputMultiple("Событие onTrade"); signal::outputMultiple("i="+i); if (i==1) { i = 0; var order1 = new_object("hash"); order1["operation"] = OP_SELL; order1["tp_activationprice"] = close+kol_punktov*step; order1["tp_quantity"] = kol_lotov; order1["tp_correction"] = "0.01"; order1["tp_guardspread"] = "0.01"; order1["sl_activationprice"] = close-kol_punktov*step; order1["sl_quantity"] = kol_lotov; order1["sl_orderprice"] = close-kol_punktov*step; trade_action::transactMultiple(order1); //Если тренд восходящий, то встаем в лонг }
signal::outputMultiple("i="+i); }
Сутью данного кода должно быть следующее. По событию сделки на рынке проверяем есть ли у нас активные сделки, ожидающие исполнения. Если таких сделок нет, то можем смело выставлять ордер на покупку. Выставили ордер, соответственно дальнейшие вызовы calc игнорируются, так как работает условие. Когда наш ордер удовлетворяется, то по событию onTrade выставляем нужный стоп лосс. Выставили. Опять ждем его исполнения. Когда удовлетворяется стоп-лосс, то мы должны запретить выполнение того же события onTrade и разрешить работу calc на выставление ордера. Для этого введен флаг i, который вы можете тут видеть. Я все проверил, по логике вещей все должно работать. Но на деле это работает совсем не так. По первому запуску выставляется ордер на покупку как надо. Когда ордер исполняется, то выставляется стоп лосс как я и хотел. Но дальше, когда стоп лосс исполняется и исполняется выставленная стоп лоссом заявка сново почему-то выставляется еще один стоп-лосс по событию onTrade и все (включая calc) перестает работать. И почему то в ошибке пишется о том, что средств не достаточно. Хотя я все проверял, всего хватает. Может быть как-то иначе можно запретить событие onTrade? Кто знает как это сделать?
13
« on: Апреля 28, 2014, 08:16:03 am »
Почему? Какие причины закрытия проекта? Конкуренция?
14
« on: Апреля 21, 2014, 12:55:11 pm »
336.01 ATF 1.20
15
« on: Апреля 17, 2014, 10:20:48 am »
Внутренней ошибки компилятора возникать не должно, здесь где-то наша ошибка. Можете показать код вашего индикатора?
Вставил код: static order = 0; ..... function calc() { ... if (trend1>0.01 and trend2>0.01) { order = trade_action::buy(kol_lotov, ::lots, close); .... } //Если тренд восходящий, то встаем в лонг } И ошибка компилятора перестала возникать.
|