Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Собираем робота своими руками (Ami + TWS) Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 01, 2013 6:22 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Как это не работает? У тебя косяк в другом месте.
Берем вот такой код.
Код:

Filter = 1;

stat = Nz(StaticVarGet( "trigger" ));

if(stat == 1)
{
  Short = 1;
  Cover = 0;
}
else
{
  Short = 0;
  Cover = 1;
}

Sell = Buy = 0;

if( stat )
    StaticVarSet( "trigger", 0 );
else
    StaticVarSet( "trigger", 1 );

AddColumn(Short, "Short");
AddColumn(Cover, "Cover");

Пихаем в АА. Ставим последний бар и Explore. Каждый следующий прогон сигналы меняются местами.


а что делает Filter = 1; ?

у меня только с ним AddColumn срабатывают.

ещё проверка исполнения ордера идёт через while-цикл и если цикл пуст через 40 сек вылетает сообщение (ниже).

10-ти миллисекундная задержка типа
Код:
for (dummy=0; dummy<1; dummy++) ibc.Sleep(10);

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

eidt: сейчас пытался через if for в while-цикле сделать бесконечный цикл. не получилось. ами ругается.
Посмотреть профиль Отправить личное сообщение
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Сб Ноя 02, 2013 10:52 pm Ответить с цитатой Вернуться к началу

накопал решение: http://www.amibroker.com/guide/w_preferences.html

в настройках можно настроить кол-во повторений цикла. Confused
Посмотреть профиль Отправить личное сообщение
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 08, 2013 12:49 am Ответить с цитатой Вернуться к началу

что-то у меня Equity(1) не хочет работать Evil or Very Mad

в этом виде:
Код:

SetOption( "ActivateStopsImmediately", True );  //stop at the openbar

ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

Equity( 1 );


Последний раз редактировалось: MrDrJOKER (Пт Ноя 08, 2013 1:47 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Ноя 08, 2013 12:54 am Ответить с цитатой Вернуться к началу

Лучше без Equity(). Не надежная функция. Придумай по другому.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 08, 2013 1:48 am Ответить с цитатой Вернуться к началу

000 писал(а):
Лучше без Equity(). Не надежная функция. Придумай по другому.


но в принципе Equity( 1 ); должна располагаться в коде ниже ф-ций ApplyStop, как я понимаю. правильно?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Ноя 08, 2013 7:09 am Ответить с цитатой Вернуться к началу

Чтбы активировать ApplyStop() (т.е. чтобы функция ApplyStop выдала Sell или Cover) необходимо использовать Equity().
Да, ее надо располагать ниже ApplyStop.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 08, 2013 2:34 pm Ответить с цитатой Вернуться к началу

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

т.е. если сработает вне торговых часов, то нужно лимитники кидать в рынок, т.к. маркет ордера платформа не пропустит. следовательно стопы надо отличать от обычны сигналов. как-то так:
Код:

StopCondition = Iif( Sell_Price + 1.00 < LastValue ( C ) , 4 , 0 ) ;


следовательно, чему будет равен сигнал на выходе этой формулы при срабатывании StopCondition?
Код:

Cover = ( Ref ( O , -1 ) <  Ref ( C , -1 ) OR StopCondition ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;

4 или 1? могу я так сделать различие стопов и обычных сигналов?
Посмотреть профиль Отправить личное сообщение
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пт Ноя 08, 2013 3:48 pm Ответить с цитатой Вернуться к началу

MrDrJOKER писал(а):
что-то у меня Equity(1) не хочет работать Evil or Very Mad

в этом виде:
Код:

SetOption( "ActivateStopsImmediately", True );  //stop at the openbar

ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

Equity( 1 );


при такой конструкции, где должны быть условия входа/выхода в коде? выше этих ф-ций стопов или ниже?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 09, 2013 10:11 pm Ответить с цитатой Вернуться к началу

MrDrJOKER писал(а):
хорошо ... вообще ж стопы через ApplyStop круглосуточно работают, независимо от временных ограничений прописаных тобой в условиях продажи и покупки?

т.е. если сработает вне торговых часов, то нужно лимитники кидать в рынок, т.к. маркет ордера платформа не пропустит. следовательно стопы надо отличать от обычны сигналов. как-то так:
Код:

StopCondition = Iif( Sell_Price + 1.00 < LastValue ( C ) , 4 , 0 ) ;


следовательно, чему будет равен сигнал на выходе этой формулы при срабатывании StopCondition?

Как это стоп сработает вне торговых часов? Это может быть только если стоп по закрытию и срабатывает на следующем баре.

StopCondition будет равен 4 а вот чему будет равен Sell после функции Equity() я не уверен. Возможно 1. Это надо проверять.


Код:

Cover = ( Ref ( O , -1 ) <  Ref ( C , -1 ) OR StopCondition ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;

4 или 1? могу я так сделать различие стопов и обычных сигналов?[/quote]
До equity() можешь.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 09, 2013 10:12 pm Ответить с цитатой Вернуться к началу

MrDrJOKER писал(а):
MrDrJOKER писал(а):
что-то у меня Equity(1) не хочет работать Evil or Very Mad

в этом виде:
Код:

SetOption( "ActivateStopsImmediately", True );  //stop at the openbar

ApplyStop( stopTypeLoss, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

ApplyStop( stopTypeProfit, stopModePoint, 0.01, ExitAtStop=1, Volatile = True, ReEntryDelay=0 );

Equity( 1 );


при такой конструкции, где должны быть условия входа/выхода в коде? выше этих ф-ций стопов или ниже?

Вроде это не важно. Главное чтобы до ф-ции Equity(), но я предпочитаю писать стопы после сигналов.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пн Ноя 11, 2013 10:48 pm Ответить с цитатой Вернуться к началу

такая штука
Код:

ibc = GetTradingInterface( "IB" );

StopCondition = IIf( ibc.GetPositionSize( Ticker ) != 0 AND LastValue ( C ) >= ( Nz( ibc.GetPositionInfo( Ticker, "Avg. Cost" ) ) + 0.02 ) , 1 , 0 ) ;

Short = Ref ( O , -1 ) >= Ref ( C , -1 ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ;
Cover = StopCondition OR ( Ref ( O , -1 ) <  Ref ( C , -1 ) AND ( Now( format = 4 ) >= 093000 AND Now( format = 4 ) < 155930 ) ) ;


когда тестю этот вариант стопа, то так работает, а если делаю такое усовие выхода, то даже в шорт не становится:
Код:

Cover = StopCondition ;

ну как так? Evil or Very Mad

и главный косяк, который я заметил в таком решении, стоп начинает срабатывать только на следующем баре! может есть у кого объяснение почему? или как заставить на этом баре работтать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 11, 2013 10:53 pm Ответить с цитатой Вернуться к началу

А тыт там потом сигналы Sell и Cover не сдвигал случайно?

Типа
Sell = Ref(Sell, -1)
Или
Sell = Sell[BarCount -2];

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Пн Ноя 11, 2013 10:55 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А тыт там потом сигналы Sell и Cover не сдвигал случайно?

Типа
Sell = Ref(Sell, -1)
Или
Sell = Sell[BarCount -2];


есть
Код:

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


да, в ExRem дело было.

но так дело не пойдёт. как мне теперь выход на баре входа сделать?

ами теперь на одном баре после срабатывания стопа соответственно сразу снова в позицию входит, если ExRem убрать.


Последний раз редактировалось: MrDrJOKER (Пн Ноя 11, 2013 11:29 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 11, 2013 11:27 pm Ответить с цитатой Вернуться к началу

В самом конце
http://www.amisite.ru/afl/exp/0003.htm

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 489

СообщениеДобавлено: Вт Ноя 12, 2013 12:45 am Ответить с цитатой Вернуться к началу

а попонятней решения нет?))

000 писал(а):
В самом конце
http://www.amisite.ru/afl/exp/0003.htm


глядел его, что-то мне там вот с этими сдвигами сигналов не всё понятно.

Код:

//////////////Система///////////////

Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));

ок, сигналы мы создали.
Код:

///////////Конец Системы////////////

Buy1 = Buy1[BarCount - 2] AND L[BarCount - 1] > C[BarCount - 2]*(1 - Stop/100);
Sell1 = Sell1[BarCount - 2];
Short1 = Short1[BarCount - 2] AND H[BarCount - 1] < C[BarCount - 2]*(1 + Stop/100);
Cover1 = Cover1[BarCount - 2];

а дальше мы сместили сигналы с позапрошлого бара на нынешний и вставили проверку , не ниже ли лоу прошлого бара чем стоп на окончании позапрошлого. мы же тем самым переписали нынешние сигналы?!
Код:

/// стопы ///
if(pos > 0 AND L[BarCount-1] < AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 - Stop/100))
{
   Sell1 = 1;
   str = str + "  сработал стоп при лонге";
}
else if(pos < 0 AND H[BarCount-1] > AS_READ_PARAM("Quik_Robot", Name(), "price")*(1 + Stop/100))
{
   Cover1 = 1;
   str = str + "  сработал стоп при шорте";
}

прорверяем наличие открытой позиции, а далее лоу предыдущего бара сравниваем с уровнем стопа от нынешней цены.

Код:

if(Buy1[BarCount-1] AND pos == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }

а далее идёт исполнение сигналов взятых с прошлого бара.
почему с прошлого, если мы в самом начале сигналы на 2 бара вперёд сдвинули? на прошлом баре ничего не появилось ...

и это всё работает? Laughing

устал я, не врубаюсь в систему эту сейчас ... но зато придумал проверку для своей системы, которая может помочь. нужно при срабатывания шорта сделать дополнительную проверку, а не был ли хай нынешнего бара выше стопа)) (чтоб фильтровать последующие сигналы после стопа на том же баре) ... блин, как же я его сравню, если он привязывается к цене сделки? а она исчезнет, после закрытия позиции. вариант, разве что, пытаться проверить в списке ордеров, когда по времени прошел прошлый ордер, но тогда на следующем баре после стопа опять откроется позиция. хана, тут без ExRem никуда, у меня ExRem - часть стратегии. Mad
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen