Автор |
Сообщение |
Виктор
Зарегистрирован: 17.03.2014
Сообщения: 5
|
Есть система работающая на большом портфеле эмитентов. При этом в тестировании я указываю максимальный лимит открытых позиций (например только 2 позиции при портфеле в 10 эмитентов).
Тестируется в Амиброкере это все "на ура", а вот как это заставить торговать в таком же ключе???
При торговле Амиброкер тупо отправляет все сигналы на исполнение несмотря на то что уже открыто 2 и более позиций.
Кто-то реализовывал подобное? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну это надо делать счетчик позиций. В принципе ничего сложного.
Где нибудь в начале кода читаем из файла колько на текущий момент позиций открыто. Типа так
Код: |
trade = AS_READ_PARAM("Quik_Robot", "TRADE", "pos"); |
Затем кода открываем или закрываем позу меняем число trade
Сюда
Код: |
if(StrToNum(order) > 100)
{
iz = "исполнена";
coloriz = colorGreen;
str = str + " заяка исполнена" + " ответ сервера=" + order;
if(pos > 0 AND bs == "S") // закрытие лонга
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
else if(pos == 0 AND bs == "S") // шорт
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
else if(pos < 0 AND bs == "B") // закрытие шорта
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
else if(pos == 0 AND bs == "B") // лонг
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
str = str + " позиция на момент исполнения " + pos;
} |
вписываем
Код: |
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade + 1); |
или
Код: |
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade - 1); |
в итоге получаем
Код: |
if(StrToNum(order) > 100)
{
iz = "исполнена";
coloriz = colorGreen;
str = str + " заяка исполнена" + " ответ сервера=" + order;
if(pos > 0 AND bs == "S") { // закрытие лонга
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade - 1);
}
else if(pos == 0 AND bs == "S") { // шорт
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade + 1);
}
else if(pos < 0 AND bs == "B") { // закрытие шорта
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade - 1);
}
else if(pos == 0 AND bs == "B") { // лонг
AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
AS_WRITE_PARAM("Quik_Robot", "TRADE", "pos", trade + 1);
}
str = str + " позиция на момент исполнения " + pos;
} |
Ну и остается только добавить фильтр на сделку в зависимости от числа открытых позиций
Код: |
if (TimeFrame == Interval() AND Permit_Ticker)
{
if(Buy1[BarCount-1] AND pos == 0 AND trade < 2) {
str = str + " Buy";
sd = "Buy";
orders("B", round(C[BarCount-1]) + Otstup, Lots);
AS_WRITE_FILE("log.quik", str);
}
else if(Sell1[BarCount-1] AND pos > 0) {
str = str + " Sell";
sd = "Sell";
orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
AS_WRITE_FILE("log.quik", str);
}
else if(Short1[BarCount-1] AND pos == 0 AND trade < 2) {
str = str + " Short";
sd = "Short";
orders("S", round(C[BarCount-1]) - Otstup, Lots);
AS_WRITE_FILE("log.quik", str);
}
else if(Cover1[BarCount-1] AND pos < 0) {
str = str + " Cover";
sd = "Cover";
orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
AS_WRITE_FILE("log.quik", str);
}
} |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Виктор
Зарегистрирован: 17.03.2014
Сообщения: 5
|
Олег, благодарю!
Я что-то подобное пытался сделать... но у тебя как-то значительно красивей все получилось )))
Правда возник следующая задачка...
Исходные условия:
сигналы по ВТБ - открытие позиции в 10:00 15 числа и закрытие позиции в 15:00 20 числа
сигналы по Сбер - открытие позиции в 11:00 15 числа и закрытие позиции в 12:00 16 числа
сигналы по Газ - открытие позиции в 15:00 15 числа и закрытие позиции в 15:00 20 числа (при этом условие на открытие держалось до 18 числа постоянно)
Т.к. автомат отрабатывает только сигналы, то он в итоге так и не откроет позу по Газу несмотря на то, что с 12:00 16 числа ДС были свободны.
При этом при тестировании ситуации в тестере, Ами открывает позу по Газу сразу как только закрывает позу по Сберу, т.к. для этого есть условия...
с этим как то можно побороться? (т.е. чтоб робот вел себя как тестер, опять же, и открывал позу по Газу) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Виктор писал(а): |
Т.к. автомат отрабатывает только сигналы, то он в итоге так и не откроет позу по Газу несмотря на то, что с 12:00 16 числа ДС были свободны.
При этом при тестировании ситуации в тестере, Ами открывает позу по Газу сразу как только закрывает позу по Сберу, т.к. для этого есть условия...
с этим как то можно побороться? (т.е. чтоб робот вел себя как тестер, опять же, и открывал позу по Газу) |
Почему не откроет? Должен открыть. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Beevolar
Зарегистрирован: 11.05.2017
Сообщения: 2
|
I know nothing is always right. Thoughts of people, the truth will come true. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|