× Ссылка на скачивание архива: www.bot4sale.ru/download-categories/2012...6/item/amisharp.html (архив под паролем)

Несколько вопросов по стопам, заявкам и позиции

Подробнее
7 года 9 мес. назад #749 от sstyle
Добрый день.

Есть простой скрипт, который шортит. В нем есть тейк-профит и стоп-лосс.

Фрагменты:

Short = Cross(MA( Close , 12 ), MA( Close , 7 ));
Cover = Cross(MA( Close , 7 ), MA( Close , 12 ));

Cover = ExRem(Cover,Short);
Short = ExRem(Short,Cover);

ApplyStop(stopTypeProfit, stopModePoint, 0.9*ATR(1), True, True );
ApplyStop(stopTypeLoss,stopModePercent, 1, True );

CurrentPosition = StrToNum(StaticVarGetText("POSITION"));
if (CurrentPosition == 0)
{ if (LastValue(Short))
{ Make_Order(ClassCode,SecCode,"Sell",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
}
else
{ if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",CurrentPosition);
StaticVarSetText("POSITION","0");
}
}


Вопросы:
1) Как сделать чтобы амишарп все это добро отрабатывал?
2) Как получать размер позиции из квика? Точнее нужно так чтобы амишарп получал размер депозита на счету, вычислял процент (допустим 70), делил на ГО и получал количество контрактов (речь про индекс на фьючерс) и оперировал именно этим количеством.

Заранее благодарен!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #750 от admin
Здравствуйте, Дмитрий.

В соответствии с вашим порядком вопросов.

1. ApplyStop. Его использовать можно, но я категорически не рекомендую это делать при роботизированной торговле. Функция предназначена для бектеста и оптимизации, для торговли несколькими скриптами одновременно - ни в коем случае. Как быть? Написать все стоп-лоссы и тейк-профиты на афл - ничего сложного в этом нет. Вот пример. www.bot4sale.ru/blog-menu/ami/amibroker-...1-trailing-stop.html Да еще и нарисовать можно линии стопов на экране, что невозможно при использовании ApplyStop.

Размер позиции из квика - вообще элементарно. Транслируете по DDE в амишарп таблицу, содержащую ваши текущие деньги (это таблица ограничений по деньгам), читаете ее из скрипта и делаете с полученными цифрами что угодно.
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #756 от sstyle

admin пишет: читаете ее из скрипта и делаете с полученными цифрами что угодно.

Спасибо большое за ответ, вот эта часть только не понятна. Каким образом ее читать? Я бы хотел читать две таблицы. Текущая чистая позиция и деньги на счету. А то current position странно расчитывается

Насчет стопов, верно ли я заменил строку

ApplyStop(stopTypeLoss,stopModePercent, 1, True );

На такой блок

MaxValue = HighestSince(Short,Low);
StopLevel = MaxValue + 0.01*(цена продажи); <- не знаю как получить цену последней продажи, и что хуже всего в сделке может быть несколько лотов по разным ценам, видимо нужна средняя?
Plot(StopLevel,"Stop",colorRed);

BuyByTrail = Ref(Close > StopLevel,-1);
Buy = Buy OR BuyByTrail;


А вот как заменить
ApplyStop(stopTypeProfit, stopModePoint, 0.9*ATR(1), True, True );

я не могу понять вобще ((
Последнее редактирование: 7 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #757 от admin
Очень просто, sstyle

Настраиваете трансляцию нужной вам таблицы в амишарп (примерно так:




У вас в амишарпе появится копия квиковской таблички. Вы можете ее посмотреть. А дальше читайте ее методами амишарпа
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #758 от sstyle
Спасибо, буду пробовать. Я дополнил вопрос чуть выше, про стопы.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #759 от admin

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



Цену сделки можно
  1. Рассчитать. В этом случае за цену сделки принимается цена инструмента в момент появления сигнала
  2. Получить реальные цены. В этом случае нужно получить все сделки по заявке и усреднить.
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #760 от sstyle
А какая переменная выдает среднюю цену шорта подскажите пожалуйста?
Еще вопрос, как в левый верхний угол графика вывести текущие значения каких-то переменных?

Правильно ли я получаю размер позиции?

Size = round(AmiSharp.GetCellName("[testbook]limit","CBPLIMIT",1)*0.7/10000);
прим: 70% от депозита, при ГО = 10000 руб.

И текущую позицию:

CurrentPosition = AmiSharp.GetCellName("[testbook]position","TOTAL_NET",1);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #761 от admin

переменная выдает среднюю цену шорта



Такой переменной не существует.

Не знаю задачи, которую вы решаете, но можно попробовать так: Берете номер заявки, которую вы отправили, смотрите в таблице сделок все сделки, которые были порождны этой заявкой и высчитываете среднее.

Правильно ли я получаю размер позиции?


Если в обеих таблицах у вас по одной строчке - то вроде правильно. распечатайте получаемые значения и убедитесь в этом :)

Единственно надо понимать, что амишарп ВСЕГДА возвращает строки. Перед математическими действиями нужно привести их к числам.
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #762 от sstyle
Задача простая. Сделать два стопа: 1) Цена продажи + фикс. значение (скажем 100 пунктов). 2) Сделать тейк-профит трейлинг на основе ATR.

Строчки по одной да, а каким образом "распечатать"?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #763 от admin
  1. смотрите номер заявки, которая породила позицию
  2. в таблице сделок собираете все сделки, которые порождены этой заявкой
  3. вычисляете среднюю цену. Теперь вы знаете цену входа.
  4. от цены входа откладываете вверх ваши 100 пунктов (для лонга) и если текущая цена выше - закрываете позицию
  5. с ценой тейкпрофита слегка сложнее. Берете макс значение за время жизни позиции, вычитаете из него значение atr() и если цена ниже - опять закрываете позиции.


Распечатать - функция _trace()
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #764 от sstyle
А можно как-то вывести в левый угол графика цены значения Size и CurrentPosition?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #765 от admin

sstyle пишет: А можно как-то вывести в левый угол графика цены значения Size и CurrentPosition?


На примере стандартного индикатора Price. Он выглядит так:
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );

Изменяем
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
Position=100;
Price=999;
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%)\n Position=%g, Price=%g {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ),Position,Price));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); 
_SECTION_END();
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #766 от sstyle
Спасибо большое! Попробую чуть позже. Останется значит тейкпрофит с трейлом по атр сделать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #769 от sstyle

admin пишет:

  1. смотрите номер заявки, которая породила позицию
  2. в таблице сделок собираете все сделки, которые порождены этой заявкой
  3. вычисляете среднюю цену. Теперь вы знаете цену входа.
  4. от цены входа откладываете вверх ваши 100 пунктов (для лонга) и если текущая цена выше - закрываете позицию
  5. с ценой тейкпрофита слегка сложнее. Берете макс значение за время жизни позиции, вычитаете из него значение atr() и если цена ниже - опять закрываете позиции.

Вот совсем не проще чем эплай стоп. А никак нельзя эплай прикрутить к амишарп? Не уверен что справлюсь с такими сложными скриптами. Вывод строк в угол графика получился, огромное спасибо!
Последнее редактирование: 7 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #770 от admin
sstyle


Ну тогда делайте applystop и бог с ним. В нужный момент он сам сделает вам сигнал Sell или сигнал Cover. Ваша задача будет в том, чтобы на последней (правой) свече этот сигнал увидеть и пульнуть в амишарп нужную транзакцию

Но будьте внимательны, если заходите одновременно запустить несколько скриптов.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #774 от sstyle

admin пишет: Ваша задача будет в том, чтобы на последней (правой) свече этот сигнал увидеть и пульнуть в амишарп нужную транзакцию

Эм, а что это значит? По идее эплайстоп должен сформировать сигнал на покупку. Амишарп должен подхватить автоматом сигнал, нет?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #776 от admin
Сам Амишарп никому ничего не должен :troll:

А вот робот - обязан. Если используется один из фреймворков, написанных мной - они будут ловить эти сигналы и отправлять транзакции. Если пишете робота сами - то это ваша забота.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #777 от sstyle

admin пишет: Сам Амишарп никому ничего не должен :troll:

А вот робот - обязан. Если используется один из фреймворков, написанных мной - они будут ловить эти сигналы и отправлять транзакции. Если пишете робота сами - то это ваша забота.

оу, а этот фреймворк где то выложен?

Я думал что этот код:

if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
StaticVarSetText("POSITION","0");
}


Как раз и "следит" за сигналом, в т.ч. от applystop.
Последнее редактирование: 7 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #778 от admin

sstyle пишет: оу, а этот фреймворк где то выложен?



Видео
Фреймворк продается.

Я думал что этот код:

if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
StaticVarSetText("POSITION","0");
}


Как раз и "следит" за сигналом, в т.ч. от applystop.


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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #784 от sstyle
напишите пожалуйста сколько стоит фреймворк.

Еще вопрос, в бектесте есть ActivateStopsImmediately опция, а в рилтайме это так и есть автоматом?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #785 от admin

sstyle пишет: напишите пожалуйста сколько стоит фреймворк.


Ответил почтой

Еще вопрос, в бектесте есть ActivateStopsImmediately опция, а в рилтайме это так и есть автоматом?


Боюсь соврать. Я не пользуюсь этими возможностями. Может, кто-то из посетителей форума сможет помочь?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #786 от sstyle
Хорошо, спасибо.

Еще вопрос - вот так верно, или много лишних повторяющихся строк? Код для амишарпа верный?

Sell = Short = Cross(MA( Close , MAt4 ), MA( Close , MAt3 ));
Buy = Cover = Cross(MA( Close , MAt3 ), MA( Close , MAt4 ));

Cover = ExRem(Cover,Short);
Short = ExRem(Short,Cover);
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

AlertIf( Short, "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 1 );
AlertIf( Cover, "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 1 );
AlertIf( Buy, "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 1 );
AlertIf( Sell, "SOUND C:\\Windows\\Media\\Ding.wav", "Audio alert", 1 );

PlotShapes(Cover * shapeUpArrow,colorGreen);
PlotShapes(Short * shapeDownArrow,colorBlue);
PlotShapes(Buy * shapeUpArrow,colorGreen);
PlotShapes(Sell * shapeDownArrow,colorBlue);

...

....

if (CurrentPosition == 0)
{ if (LastValue(Short))
{ Make_Order(ClassCode,SecCode,"Sell",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
if (LastValue(Buy))
{ Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
}
else
{ if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition)+Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
if (LastValue(Sell))
{ Make_Order(ClassCode,SecCode,"Sell",abs(CurrentPosition)+Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
}

Последнее редактирование: 7 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #788 от admin
sstyle

я не увидел ни одной повторяющейся строки :dry:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #789 от sstyle
PlotShapes(Cover * shapeUpArrow,colorGreen);
PlotShapes(Buy * shapeUpArrow,colorGreen);

Это ведь одновременное событие, а стрелки две будет?

тоже самое и с алертами.

А код амишарпа верный?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #790 от admin
sstyle

PlotShapes(Cover * shapeUpArrow,colorGreen);
PlotShapes(Buy * shapeUpArrow,colorGreen);

Это ведь одновременное событие, а стрелки две будет?


Cover и Buy - совершенно разные массивы, никак не связанные друг с другом.
Значения этих массивов на некоторых свечах могут совпадать (тогда это реверсивная система и стрелки будут нарисованы на одинаковых свечах). Но могут и не совпадать.

тоже самое и с алертами


Именно. То же самое :unsure:

А код амишарпа верный?

Даже не сомневайтесь :good:
Последнее редактирование: 7 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #791 от sstyle
Спасибо! Буду изучать тогда информацию про фреймворк дальше

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #795 от sstyle
Поставил расчет величины позиции = 80% от депозита. Депозит 50тыс рублей. ГО - 11600руб.

Прога насчитала - 3 фьючерса. Текущая позиция -2. Срабатывает сигнал, должен купить 5. В квике я могу купить 5.

А вот амишарп ругается:

23.09.2014 16:51:50 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=1630;SECCODE=RIZ4;QUANTITY=5;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,0,Ошибка создания заявки. [FORTS][332] "Нехватка средств по лимитам клиента.".,0,

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #797 от admin
sstyle.


Ругается не амишарп, а брокер. Он не разрешает Вам выставить заявку в таком объеме.

Это особенность торговой системы. Сначала в вашем случае позицию надо закрыть, а потом открыть новую. Тогда сможете войти на 3 контракта в лонг.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад - 7 года 9 мес. назад #798 от sstyle
Я вот как раз выше про это спрашивал. Только я думал это квик вышибает. То есть вместо

if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition)+Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}

надо написать

if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
?

Еще одна проблема. Получаю размер ГО из таблицы, а там он через запятаю вместо точки. Соответственно в число не переводится(StrToNum не работает), можно это как-то побороть?
Последнее редактирование: 7 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
7 года 9 мес. назад #799 от admin
Ну а почему бы вам не попробовать? Вдруг получится? :dance:


Что касается точек и запятых: ПОЛУЧЕНИЕ РЕГИОНАЛЬНЫХ НАСТРОЕК

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin