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



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

СообщениеДобавлено: Вт Фев 17, 2009 12:51 pm Ответить с цитатой Вернуться к началу

Состав то известен, да веса непонятно какие будут.

А код то правельный или нет? Я его проверить к сожалению кроме как на синтаксиси не могу? Может он циклы где лишние делает?
Посмотреть профиль Отправить личное сообщение
Gluhov



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

СообщениеДобавлено: Вт Фев 17, 2009 12:59 pm Ответить с цитатой Вернуться к началу

А потимизации кстати по методу монте кало - более бытсрому - у AMI нету?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Фев 17, 2009 1:09 pm Ответить с цитатой Вернуться к началу

В Ами есть генетические. А чем Монте карло быстрее? На сколько я знаю монтекарло это просто анализ надежности системы. Правдя я подробно не изучал вопрос.
Код вечером подробно посмотрю.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вт Фев 17, 2009 1:10 pm Ответить с цитатой Вернуться к началу

Gluhov писал(а):
Состав то известен, да веса непонятно какие будут.

А код то правельный или нет? Я его проверить к сожалению кроме как на синтаксиси не могу? Может он циклы где лишние делает?


А что значит сел = 50 р с графика гп?


СИНТАКСИС foreign( TICKER, DATAFIELD, fixup = 1)
ВОЗВРАЩАЕТ МАССИВ
ФУНКЦИЯ Допускает ссылки на другие (отличные от выбранного) символы в формулах AFL. TICKER является текстом который указывает символ. DATAFIELD определяет требуемый массив. Доступные поля данных: "open", "close", "high", "low", "volume", "interest".
Последний параметр - fixup - допускает следующие значения


Постараюсь вечером посмотреть

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Gluhov



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

СообщениеДобавлено: Вт Фев 17, 2009 2:05 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
Gluhov писал(а):
Состав то известен, да веса непонятно какие будут.

А код то правельный или нет? Я его проверить к сожалению кроме как на синтаксиси не могу? Может он циклы где лишние делает?


А что значит сел = 50 р с графика гп?


СИНТАКСИС foreign( TICKER, DATAFIELD, fixup = 1)
ВОЗВРАЩАЕТ МАССИВ
ФУНКЦИЯ Допускает ссылки на другие (отличные от выбранного) символы в формулах AFL. TICKER является текстом который указывает символ. DATAFIELD определяет требуемый массив. Доступные поля данных: "open", "close", "high", "low", "volume", "interest".
Последний параметр - fixup - допускает следующие значения


Постараюсь вечером посмотреть


Честно говоря непонял что ты имел ввиду под "А что значит сел = 50 р с графика гп?".

Фикс я включил в foreign так как данные у множества фьючерсов хуже чем для фьючерса на РТС - больше пробелов.

Вообщето я подумал что неплохо в систему добавить еще пару тройку фьючерсов - на доллар, ВТБ, Сургут. Но я боюсь оптимизация тогда займет очень много времени.... =(
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Gluhov писал(а):
commenced писал(а):
Gluhov писал(а):
Состав то известен, да веса непонятно какие будут.

А код то правельный или нет? Я его проверить к сожалению кроме как на синтаксиси не могу? Может он циклы где лишние делает?


А что значит сел = 50 р с графика гп?


СИНТАКСИС foreign( TICKER, DATAFIELD, fixup = 1)
ВОЗВРАЩАЕТ МАССИВ
ФУНКЦИЯ Допускает ссылки на другие (отличные от выбранного) символы в формулах AFL. TICKER является текстом который указывает символ. DATAFIELD определяет требуемый массив. Доступные поля данных: "open", "close", "high", "low", "volume", "interest".
Последний параметр - fixup - допускает следующие значения


Постараюсь вечером посмотреть


Честно говоря непонял что ты имел ввиду под "А что значит сел = 50 р с графика гп?".

Фикс я включил в foreign так как данные у множества фьючерсов хуже чем для фьючерса на РТС - больше пробелов.

Вообщето я подумал что неплохо в систему добавить еще пару тройку фьючерсов - на доллар, ВТБ, Сургут. Но я боюсь оптимизация тогда займет очень много времени.... =(


Я про эти куски Short=Foreign( "RIH9", "Close").... и т.д. шорт = слозу rih9; C= 10000р, значит шорт = 10000р, у тебя массив вместо условия.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Gluhov



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

СообщениеДобавлено: Вт Фев 17, 2009 4:40 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
Gluhov писал(а):
commenced писал(а):
Gluhov писал(а):
Состав то известен, да веса непонятно какие будут.

А код то правельный или нет? Я его проверить к сожалению кроме как на синтаксиси не могу? Может он циклы где лишние делает?


А что значит сел = 50 р с графика гп?


СИНТАКСИС foreign( TICKER, DATAFIELD, fixup = 1)
ВОЗВРАЩАЕТ МАССИВ
ФУНКЦИЯ Допускает ссылки на другие (отличные от выбранного) символы в формулах AFL. TICKER является текстом который указывает символ. DATAFIELD определяет требуемый массив. Доступные поля данных: "open", "close", "high", "low", "volume", "interest".
Последний параметр - fixup - допускает следующие значения


Постараюсь вечером посмотреть


Честно говоря непонял что ты имел ввиду под "А что значит сел = 50 р с графика гп?".

Фикс я включил в foreign так как данные у множества фьючерсов хуже чем для фьючерса на РТС - больше пробелов.

Вообщето я подумал что неплохо в систему добавить еще пару тройку фьючерсов - на доллар, ВТБ, Сургут. Но я боюсь оптимизация тогда займет очень много времени.... =(


Я про эти куски Short=Foreign( "RIH9", "Close").... и т.д. шорт = слозу rih9; C= 10000р, значит шорт = 10000р, у тебя массив вместо условия.


а как правильно?
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вт Фев 17, 2009 5:09 pm Ответить с цитатой Вернуться к началу

Так я тебе сразу предлогал 2 системы писать чтоб головников небыло.

можно через цикл, наверное, пока в них не сильно рублю Но выглядить он должен так если тикер Rih9, то вход такой(сел, шорт, cover), если нет и тикер такой то так и т.д.

как вариант могу предложить попробывать так без циклов

Buy = iif(name()==Rih9,условие,iif(name()==gghj,условие,......0));

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Gluhov



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

СообщениеДобавлено: Вт Фев 17, 2009 5:40 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
Так я тебе сразу предлогал 2 системы писать чтоб головников небыло.

можно через цикл, наверное, пока в них не сильно рублю Но выглядить он должен так если тикер Rih9, то вход такой(сел, шорт, cover), если нет и тикер такой то так и т.д.

как вариант могу предложить попробывать так без циклов

Buy = iif(name()==Rih9,условие,iif(name()==gghj,условие,......0));


Извращенно =) - то есть проще говоря писать не через цикл, а единое условие просtо сверяя с каким тикетом он в данный момент работаeт?

Сейчас поставил на оптимизацию (на ночь), если с утра не соптимизирует - то тогда буду переписывать по такому сценарию.

Единственная проблема - это проверка а не в позиции ли он уже. Я это сделал через доп. переменную, в данном случае так как я незнаю как делать глобальные переменные в Ami - буду надеятся что после первого Sell он второй Sell не сделает.
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

Gluhov писал(а):
commenced писал(а):
Так я тебе сразу предлогал 2 системы писать чтоб головников небыло.

можно через цикл, наверное, пока в них не сильно рублю Но выглядить он должен так если тикер Rih9, то вход такой(сел, шорт, cover), если нет и тикер такой то так и т.д.

как вариант могу предложить попробывать так без циклов

Buy = iif(name()==Rih9,условие,iif(name()==gghj,условие,......0));


Извращенно =) - то есть проще говоря писать не через цикл, а единое условие просtо сверяя с каким тикетом он в данный момент работаeт?

Сейчас поставил на оптимизацию (на ночь), если с утра не соптимизирует - то тогда буду переписывать по такому сценарию.

Единственная проблема - это проверка а не в позиции ли он уже. Я это сделал через доп. переменную, в данном случае так как я незнаю как делать глобальные переменные в Ami - буду надеятся что после первого Sell он второй Sell не сделает.


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

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Вт Фев 17, 2009 7:07 pm Ответить с цитатой Вернуться к началу

Gluhov писал(а):

Единственная проблема - это проверка а не в позиции ли он уже. Я это сделал через доп. переменную, в данном случае так как я незнаю как делать глобальные переменные в Ami - буду надеятся что после первого Sell он второй Sell не сделает.

Пока подробно не посмотрел. Просто прочитал простой вопрос. Smile Не, Ами второй Sell никак не сделает. При тесте и сканировании Ами сам анализирует и если бумага в покупке, то все Buy игнорируются полюбому (аналогично для Short). Соответственно если бумага квадратная, то все сигналы на выход (sell/cover) игнорируются.

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


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

СообщениеДобавлено: Вт Фев 17, 2009 7:59 pm Ответить с цитатой Вернуться к началу

Ага. Системка действительно не сложная, но написана совсем не правильно.
Полностью писать не буду, но основные моменты опишу.
Это, как я понял сайз которым открываются позы по GZH9, LKH9, SNH9
Код:

X = Optimize("X", 1, 1, 20, 1);
Y = Optimize("Y",1, 1, 20, 1);
Z = Optimize("Z",1, 1, 20, 1);

Пока все нормально. Дальше до
Код:

s1 = x*Foreign( "GZH9", "Close",1);
s2 = y*Foreign( "LKH9", "Close",1);
s3 = z*Foreign( "SNH9", "Close",1);
RTS = Foreign( "RIH9", "Close",1);

включительно все нормально.

Дальше считаем виртуальный фьюч
Код:

RTSv = s1+s2+s3;

Цикл не надо!!!

===========
Дальше. Гонять тест будем по этим 4 бумагам и нам требуется чтобы когда
RTS > RTSv+up
продать RIH9 и купить все остальное. И т.д.

Я бы написал так
Код:

Cond1 = RTS > RTSv + up; // продажа индекса покупка остального
Cond2 = RTS < RTSv+exitup; // конец продажи индекса
Cond3 = RTS < RTSv-down; // покупка индекса продажа остального
Cond4 = RTS > RTSv-exitup; // конец покупки индекса

if(Name() == "RIH9")
{
   Buy = Cond3;
   Sell = Cond4;
   Short = Cond1;
   Cover = Cond2;
}
else
{
   Buy = Cond1;
   Sell = Cond2;
   Short = Cond3;
   Cover = Cond4;
}

Вот типа почти все. Правда забыл установить сайзы для разных символов
Типа так
Код:

if(Name() == "RIH9")
   SetPositionSize( 1, spsShares );
else if(Name() == "GZH9")
   SetPositionSize( x, spsShares );
else if(Name() == "LKH9")
   SetPositionSize( y, spsShares );
else if(Name() == "SNH9")
   SetPositionSize( z, spsShares );


Необходимо пояснить как работает тестер. Не зависимо от того какой символ сейчас обрабатывается тестер сможет расчитать RTSv и посмотреть значение RTS и соответственно сравнить.
Далее если в данный момент обрабатывается символ RIH9, то будут сигналы на сделки в соответствии с этим
if(Name() == "RIH9")
{
Buy = Cond3;
Sell = Cond4;
Short = Cond1;
Cover = Cond2;
}
блоком, а если другой, то с этим
else
{
Buy = Cond1;
Sell = Cond2;
Short = Cond3;
Cover = Cond4;
}
Ну и Ами соответственно откроет нужные позиции. Если будут еще сигналы на открытие, то Ами их проигнорирует пока открыты эти.
Ну в общем по моему ясно.

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



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

СообщениеДобавлено: Вт Фев 17, 2009 9:11 pm Ответить с цитатой Вернуться к началу

Пока ты писал, я примерно такую же логику изобразил но к сожалению в цикле:

<code>
// copyright Sergey Gluhov sergey@gluhov.com

X = Optimize("X", 2, 1, 10, 1);
Y = Optimize("Y",2, 1, 10, 1);
Z = Optimize("Z",2, 1, 10, 1);
A = Optimize("A",1, 1, 10, 1);
up = Optimize("up",3000, 1, 5500, 700); //максимальная граница отклонения фьючерса РТС вверх от виртуального фьчерса при которой происходит вход в позицию
down = Optimize("down",1500, 1, 5500, 700); //максимальная граница отклонения фьючерса РТС вниз от виртуального фьчерса при которой происходит вход в позицию
exitup = Optimize("exitup",2000, 1, 2500, 500); // на каком уровнее надо выходить из позиции короткой позиции по фьючерсу
exitdown = Optimize("exitdown",2000, 1, 2500, 500); // на каком уровнее надо выходить из позиции длинной позиции по фьючерсу
exitup = exitup-1000; //чтобы граница выхода могла быть меньше чем виртульный фьючь
exitdown = exitdown-1000; //чтобы граница выхода могла быть меньше чем виртульный фьючь

s1 = x*Foreign( "GZH9", "Close",1);
s2 = y*Foreign( "LKH9", "Close",1);
s3 = z*Foreign( "SNH9", "Close",1);
RTS =A*Foreign( "RIH9", "Close",1);
RTSv=s1+s2+s3; //считаем РТС виртуальный

for( i = 1; i < BarCount; i++ )
{

SetPositionSize(
IIf(Name() == "GZH9",x,
IIf(Name() == "LKH9",y,
IIf(Name() == "SNH9",z,
IIf(Name() == "RIH9", A, 0)))), spsShares);





if (RTS[i] >(RTSv[i]+up)) {

//входим в позицию - фьючерс РТС перекуплен - нужно продать 1 фьючерса на индекс, купить все остальные фьючерсы в количестве равным весам

Short =(Name()=="RIH9") ;
Buy =(Name()=="GZH9") ;
Buy=(Name()=="LKH9") ;
Buy =(Name()=="SNH9") ;

}

if (RTS [i]<RTSv[i]+exitup) {

//выходим из позиции - фьючерс РТС вернулся к нормальному уровню - нужно купить 1 фьючерс на индекс (cover), продать (sell) все остальные фьючерсы в количестве равным весам


Cover =(Name()=="RIH9") ;
Sell =(Name()=="GZH9") ;
Sell=(Name()=="LKH9") ;
Sell =(Name()=="SNH9") ;

}



if (RTS [i]<RTSv[i]-down) {

//входим в позицию - фьючерс РТС перепродан - нужно купить 1 фьючерс на индекс, продать все остальные фьючерсы в количестве равным весам

Buy =(Name()=="RIH9") ;
Short =(Name()=="GZH9") ;
Short=(Name()=="LKH9") ;
Short =(Name()=="SNH9") ;


}

if (RTS [i]>RTSv[i]-exitup) {

//выходим из позиции - фьючерс РТС вернулся к нормальному уровню - нужно продать 1 фьючерс на индекс (Sell), купить (cover) все остальные фьючерсы в количестве равным весам


Sell =(Name()=="RIH9") ;
Cover =(Name()=="GZH9") ;
Cover=(Name()=="LKH9") ;
Cover =(Name()=="SNH9") ;



}


} // закрываем основной цикл

</code>

Причем в цикде пришлось делать, потому что по каой то причине - не могу понять по какой if (RTS >RTSv-exitup) неработает - говорит ошибка синтаксиса, с [i] - массивами почему то работает - то есть вот такая строчка прозодит проверку на синтаксис - if (RTS [i]>RTSv[i]-exitup).
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Фев 17, 2009 9:34 pm Ответить с цитатой Вернуться к началу

Цитата:

Причем в цикде пришлось делать, потому что по каой то причине - не могу понять по какой if (RTS >RTSv-exitup) неработает - говорит ошибка синтаксиса

Хм. Странно. Возможно надо в настройках тестера поставить в Pad and align all data to reference sumbol: галку и RIH9. Чтобы не было случаев когда в одном символе данные есть, а в другом в этом месте пусто. Кроме того надо в настройках указать чтобы Ами объемы не проверял.

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вт Фев 17, 2009 9:42 pm Ответить с цитатой Вернуться к началу

Первое, убрать лишнюю оптимизацию.
Для расчета предлогаю брать 5 бумаг с мак весом в индексе
ГП - 23%
лук - 30%
рося - 18%
сбер - 12,7%
сур - 16,3%

По данным с http://www.rts.ru/?id=2410 высчитывал пропорционально, чтоб получалось 100%, реально перечисленные бумаги занимают 59,19%

А теперь код без цикла и извращений Smile (т.к. я не качаю нужные тебе фьючи, добей нужные названия сам и раставь коэфиценты веса исходя из вышеперечисленных пропорций)

Код:

X = число;
Y = число;
Z = число;
up = Optimize("up",1, 1, 5500, 200);
down = Optimize("down",1, 1, 5500, 200);
exitup = Optimize("exitup",1, -1000, 2500, 200);





s1 = x*Foreign( "GZH9", "Close",1);
s2 = y*Foreign( "LKH9", "Close",1);
s3 = z*Foreign( "SNH9", "Close",1);
RTS = Foreign( "RIH9", "Close",1);
RTSv = s1+s2+s3+...;

Cond1 = RTS > RTSv + up;
Cond2 = RTS < RTSv+exitup; 
Cond3 = RTS < RTSv-down;
Cond4 = RTS > RTSv-exitup;


Buy = IIf(Name() == "RIH9",Cond3,Cond1);
Sell = IIf(Name() == "RIH9",Cond4,Cond2);
Short = IIf(Name() == "RIH9",Cond1,Cond3);
Cover = IIf(Name() == "RIH9",Cond2,Cond4);


SetPositionSize( IIf(Name() == "RIH9",50,IIf(Name() == "GZH9",11.5,IIf(Name() == "LKH9",15,IIf(Name() == "SNH9",8.15,.....0)))), 2 );



Надеюсь ты понимаеш, что вес бумаг периодически меняется (необходимо будет следить за сайтом РТС и изменениями в расчете индекса РТС) и на истории тестировать будет проблематично.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen