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);}
#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);}
Нашли ошибку. Тестировщик вместо onTrade отправляет старый сигнал onATFTrade. Исправсили, в ближайшей сборке будет работать нормально.
Code: [Select]#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 лота и все, дальше сделок нет. Так было и задумано.Если запускаю этот скрипт в тестере стратегий на исторических данных он мне рисует вот такую картину
Quote from: nxz on Октября 18, 2013, 12:14:27 pmCode: [Select]#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);}