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



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

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

000 писал(а):
Наверное он имел в виду mtRandom()/mtRandomA()

согласен - это лучше подходит
Посмотреть профиль Отправить личное сообщение
rupiter



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

СообщениеДобавлено: Пт Фев 26, 2021 7:50 am Ответить с цитатой Вернуться к началу

Наткнулся на интересный баг. В сети гуляет код системы со случайным входом (взятый из книги Ховарда Банди):
Код:

SetTradeDelays( 0, 0, 0, 0 );
Stop = 0;
BuyPrice = C;
SellPrice = C;
// Frequency is the number of entries per year.
Frequency = Param( "Entries per Year", 12, 1, 100, 1 ); // 3 - PB, 2 - CPB, 4 - all
// Repeatable is a switch.
// True (1): the sequence of random numbers will be repeated.
// False (0): each sequence is random.
Repeatable = Param( "Repeatable", 0, 0, 1, 1 );
// Seed is the number used to start the random sequence // when repeatable sequences are desired.
Seed = Param( "Seed", 13331, 1, 99999, 1 );
// Generate a fraction, uniformly distributed // between 0.00000 AND 0.99999.
NextRandom = IIf( Repeatable, Random( Seed ), Random() );
Buy = IIf( NextRandom < Frequency / 252, 1, 0 );
// The code for the exit being tested starts here.
//
// HoldBars is the number of bars to wait for exit.
HoldBars = Optimize( "HoldBars", 2, 1, 20, 1);
Sell = BarsSince( Buy ) >= HoldBars;
// The code for the exit being tested ends here.
// Remove extra Buy and Sell signals.
Buy = ExRem( Buy, Sell );
Sell = ExRem( Sell, Buy );

Интересно, что код предусматривает переключение режимов (новый набор входов при каждом тесте / один и тот же набор), которое определяется переменной Repeatable, используемой в качестве входного аргумента Seed в функции Random(Seed)... На первый взгляд с кодом все в порядке, и если переключатель Repeatable установлен на 0, то будет запущена функция Random(), то есть без аргумента, что должно приводить к генерации новых входов с каждым новым тестом системы. Но этого не происходит! Методом перебора я нашел, что дело в строчке
Код:
NextRandom = IIf( Repeatable, Random( Seed ), Random() );

причем, переменная NextRandom вообще может нигде не использоваться. Например, здесь:
Цитата:
SetTradeDelays( 0, 0, 0, 0 );
Stop = 0;
BuyPrice = C;
SellPrice = C;

Frequency = Param( "Entries per Year", 12, 1, 100, 1 );
Repeatable = Param( "Repeatable", 0, 0, 1, 1 );
Seed = Param( "Seed", 13331, 1, 99999, 1 );
NextRandom = IIf(Repeatable, mtRandomA(Seed), mtRandomA());


rand = mtRandomA();

Buy = IIf( rand < 0.5, 1, 0 );

Sell = BarsSince( Buy ) >= 5;

Здесь NextRandom не используется вообще нигде, но, тем не менее, набор сделок перестает меняться при повторных тестах. Если же эту строчку закомментить, то набор сделок начнет меняться, как и должен.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Фев 26, 2021 9:28 am Ответить с цитатой Вернуться к началу

Exclamation

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen