[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 279
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Накидайте алгоритм, словами, а то непонятно чуток...
Примерно так:
//определяем общее количество дней торговли.
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);
потом за указанный период рассчитываем прибыль/дни = %/день
Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:
прибыль/(дни-выходные)
Примерно так:
//определяем общее количество дней торговли.
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);
потом за указанный период рассчитываем прибыль/дни = %/день
Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:
прибыль/(дни-выходные)
Проверьте наличие необходимой истории за период и считайте свою "прибыль/дни". Только не используйте календарные (константы в Вашей формуле), и все. В историю попадают только торговые дни(бывают еще и общепраздничные). Привяжитесь к дневным барам, например...
Если же Вы конкретно хотите по календарю (григорианскому, или, например, юлианскому, то тада всю логику берите на себя). Чё там мудрить, есть новый бар, есть новая песня?
Примерно так:
//определяем общее количество дней торговли.
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);
потом за указанный период рассчитываем прибыль/дни = %/день
Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:
прибыль/(дни-выходные)
Можно посчитать количество дневных баров с даты начала тестирования.
Можно посчитать количество дневных баров в которых часовых баров больше 20 (чтобы исключить неполные выходные) . Можно в процессе работы отслеживать новый день наподобии появления нового бара, ну и так далее (типа прочитать всю историю сделок и посчитать уникальные даты).
Можно посчитать количество дневных баров с даты начала тестирования.
Можно посчитать количество дневных баров в которых часовых баров больше 20 (чтобы исключить неполные выходные) . Можно в процессе работы отслеживать новый день наподобии появления нового бара, ну и так далее (типа прочитать всю историю сделок и посчитать уникальные даты).
Проверьте наличие необходимой истории за период и считайте свою "прибыль/дни". Только не используйте календарные (константы в Вашей формуле), и все. В историю попадают только торговые дни(бывают еще и общепраздничные). Привяжитесь к дневным барам, например...
Если же Вы конкретно хотите по календарю (григорианскому, или, например, юлианскому, то тада всю логику берите на себя). Чё там мудрить, есть новый бар, есть новая песня?
Так сделал:
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24));
for(i=0; i<Days; i++)
{
if(TimeDayOfWeek(CurTime()-i*24*3600)==6 || TimeDayOfWeek(CurTime()-i*24*3600)==7) Days3++;
}
Days-=Days3;
Так сделал:
OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);
Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24));
for(i=0; i<Days; i++)
{
if(TimeDayOfWeek(CurTime()-i*24*3600)==6 || TimeDayOfWeek(CurTime()-i*24*3600)==7) Days3++;
}
Days-=Days3;
да нет, этим ордерселектом Вы выбираете ордера в истории (ОДИН раз), далее идете только по одному (последнему). Ничего не смущает?
Сделайте в цикле перебор ордеров, и к каждому примените свои условия.
// Перебор в цикле всех ордеров
for(int i=0;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
// Если инструмент и магик соответствуют - значит ордер наш
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
// Вот здесь проверка
}
}
}
да нет, этим ордерселектом Вы выбираете ордера в истории (ОДИН раз), далее идете только по одному (последнему). Ничего не смущает?
Сделайте в цикле перебор ордеров, и к каждому примените свои условия.
// Перебор в цикле всех ордеров
for(int i=0;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
// Если инструмент и магик соответствуют - значит ордер наш
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
// Вот здесь проверка
}
}
}
Ну, конечно, ошибся:
TimeDayOfWeek(CurTime()-i*24*3600)==7
вместо 7 должно быть 0
Проверил, на счетах, которые уже больше недели. Вроде правильно показывает.
Как вычисляется iMA?
Где-нибудь можно найти как вычисляется функция iMA (или она засекреченная)
Особеннно меня интересует MODE_LWMA.
Хочу посмотреть и подправить на свой вкус, но что-то нагуглить исходники не получилось
Ну, конечно, ошибся:
TimeDayOfWeek(CurTime()-i*24*3600)==7
вместо 7 должно быть 0
Проверил, на счетах, которые уже больше недели. Вроде правильно показывает.