Просмотр сообщений
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 - alexejshevchenko
31
« on: 12.02.2014, 14:46:37 »
#samewindow #line 0 solid blue //------------------------------------------------------------------------------------ static m; static stz; static pr; static op; var x; var y; //------------------------------------------------------------------------------------ function init() { x = new_object("hash"); y = new_object("hash"); } //------------------------------------------------------------------------------------ function onOrder(var id) { x = getOrder(id); stz = x["status"]; // Запоминаем статус заявки } function onTrade(var id) { y = getTrade(id); op = y["operation"]; // Запоминаем направление сделки pr = y["price"]; // Запоминаем цену сделки } //------------------------------------------------------------------------------------ function calc() { if (m == 0) {trade_action::sell(1, ::lots); } if (op == -1) {m = 1;} // где op = y["operation"]; переменная из хэша, что сделка на продажу прошла line[0] = MovAvg(ind_ema, 5, pt_close); } Когда скрипт запускаю в окне графика, происходит продажа 1 лота и все, дальше сделок нет. Так было и задумано.

Если запускаю этот скрипт в тестере стратегий на исторических данных он мне рисует вот такую картину

Ответ: На протяжении всей работы скрипта m=0; соответственно до второй скобки компилятор даже не добирается (чтобы сделать m = 1), если бы в первых скобках стояла мультиплай версия продажи - то он бы шмалял продажи по каждому тику. Так как там не мультиплай - делает продажу на каждую свечку по одному разу.
В целом условие которое вы ждете if (op == -1) где op = y["operation"]; может и наступать,...но не сработает во-первых из вышеизложенного, и во-вторых - в переменную же сохраняется стринг в виде константы "OP_SELL" - а не число, равное -1
Поэтому самое целесообразное, для такого минутного торга, сделать так :
function calc() {
if (op == "OP_SELL") {m = 1;}
if (m == 0) {trade_action::sell(1, ::lots); } line[0] = MovAvg(ind_ema, 5, pt_close); }
Не соглашусь. Константу не надо заключать в кавычки. И если сравнить значение с -1, то тоже будет работать. Переменная m статическая глобальная. Так что при первой сделке m будет равно 1. Всё дело в том, что надо использовать onATFOrder и onATFTrade
32
« on: 11.02.2014, 16:37:59 »
Какой логин для коннектора? пробовал от транзака - пишет <server_status connected="error">Неверный идентификатор, пароль или Touch Memory</server_status> на транзаке с такими же параметрами заходит.
33
« on: 11.02.2014, 10:23:42 »
Читал на форуме, что в тетере некорректно работают стоп заявки. Сейчас столкнулся, что функция getActiveStopOrderIDs() не возвращает активные стоп заявки. После работы тестера можно посмотреть заявки - стопы выставляются.
34
« on: 10.02.2014, 15:00:07 »
Просто показывает выполняется условие вверх или вниз. Если MovAvg больше предыдущего значения и MACD больше предыдущего (т.е. линии направленны вверх), то на гистограмме палка вверх, т.е. =1. Так же и наоборот
35
« on: 10.02.2014, 14:47:36 »
К сожадению, в транзаке пока таких возмостей нет.
36
« on: 10.02.2014, 14:38:22 »
А почему он отображается некорректно? Судя по коду - это гистограмма в отдельном окне со значениями от -1 до 1. Так он и выводится.
37
« on: 10.02.2014, 10:43:24 »
Нашёл небольшой баг при выставлении стоп заявки. Стоп выставляется с использованием кредита. stop["sl_usecredit"] = true;
Если использовать подтверждение stop["confirm_dialog"]=true;
то окошко заявки будет полностью заполнено из хэша, который передали, но галочки на "использовать кредит" не стоит. Без подтверждения стоп выставляется правильно, с использованием кредита.
38
« on: 07.02.2014, 14:27:45 »
OS_WATCHING это константа, означающая что заявка ожидает условия, т.е. это активная условная заявка. значение 11 - это OS_MATCHED, т.е. заявка исполнена.
39
« on: 07.02.2014, 11:55:32 »
та я тоже за общение на "ты" ))
в переменных idO и idS у тебя id заявок. Получаешь структуру getOrder(id) и оттуда берёшь номер заявки ))
40
« on: 07.02.2014, 11:29:12 »
я так сделал:
var ins=getSecInfo(); var ids = getAllOrderIDs(); var z_id;
while(ids.size()>0){ z_id=ids.shift(); var z=getOrder(z_id); if(z["secid"]!=ins["secid"]){continue;} if(z["status"]==OS_WATCHING){
ПОЛУЧИЛИ УСЛОВНУЮ ЗАЯВКУ z_id
} }
41
« on: 07.02.2014, 11:05:18 »
На самом деле меня интересует только событие закрытия окна (т.е. без выставления заявки). В таком случае onOrder не вызывается. Очень жаль. Буду что-то придумывать...
42
« on: 07.02.2014, 10:55:13 »
Здравствуйте.
Можно ли узнать результат закрытия окна ввода заявки? Т.е. при вводе заявки ставлю флаг confirm_dialog=true. Всплывает окно ввода заявки. Можно ли узнать как закрылось окно? Кнопкой OK, CANCEL, выставилась заявка, или нет?
43
« on: 07.02.2014, 10:43:07 »
Спасибо. Я сегодня утром уже сделал ))
44
« on: 06.02.2014, 20:16:47 »
Мне кажется дело не в том, что язык умирает, а в том, что мало кто програмирует на atf. Ни для кого не секрет, что это новый язык и поэтому ограничен функционалом. Хотя с обновлениями выходит множество новых функций и жить становится легче )) в этом и причина что в Финаме Вам не смогли найти человека. Насчёт долгого ответа разработчиков не согласен.
45
« on: 06.02.2014, 19:11:49 »
Я понял почему данный пример не работает. Переменная flag приняла значение true на 1 баре из истории. Сейчас не могу привести отрывок кода, который у меня не работает. Смысл заключается в том, что когда робот выставляет заявку и выводит окно с подтверждением, он это делает на каждом тике, т.е всплывает сразу много окон. Вот я и хотел поставить флаг(окно активно) и после выставления заявки снять его. Кратная функция (без multiple) не подходит, т.к. на 1 свече может быть несколько заявок.
|