[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 279

 
snail09:
Накидайте алгоритм, словами, а то непонятно чуток...

Примерно так:

//определяем общее количество дней торговли.

OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);

Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);

потом за указанный период рассчитываем прибыль/дни = %/день

Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:

прибыль/(дни-выходные)

 

forexnew:

Примерно так:

//определяем общее количество дней торговли.

OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);

Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);

потом за указанный период рассчитываем прибыль/дни = %/день

Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:

прибыль/(дни-выходные)



Проверьте наличие необходимой истории за период и считайте свою "прибыль/дни". Только не используйте календарные (константы в Вашей формуле), и все. В историю попадают только торговые дни(бывают еще и общепраздничные). Привяжитесь к дневным барам, например...

Если же Вы конкретно хотите по календарю (григорианскому, или, например, юлианскому, то тада всю логику берите на себя). Чё там мудрить, есть новый бар, есть новая песня?

 
forexnew:

Примерно так:

//определяем общее количество дней торговли.

OrderSelect(0,SELECT_BY_POS,MODE_HISTORY);

Days=MathRound((TimeCurrent()-OrderOpenTime())/(3600*24) + 1);

потом за указанный период рассчитываем прибыль/дни = %/день

Мне нужно подсчитать выходные дни за весь этот период и исключить из расчета:

прибыль/(дни-выходные)



Можно посчитать количество дневных баров с даты начала тестирования.

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

 
splxgf:

Можно посчитать количество дневных баров с даты начала тестирования.

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

В любом случае "(3600*24) + 1)" - не адекватная конструкция, от количества баров надо отталкиваться.
 
snail09:

Проверьте наличие необходимой истории за период и считайте свою "прибыль/дни". Только не используйте календарные (константы в Вашей формуле), и все. В историю попадают только торговые дни(бывают еще и общепраздничные). Привяжитесь к дневным барам, например...

Если же Вы конкретно хотите по календарю (григорианскому, или, например, юлианскому, то тада всю логику берите на себя). Чё там мудрить, есть новый бар, есть новая песня?

Так сделал:

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;

 
forexnew:

Так сделал:

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)

{

// Вот здесь проверка

}

}

}

 
snail09:

да нет, этим ордерселектом Вы выбираете ордера в истории (ОДИН раз), далее идете только по одному (последнему). Ничего не смущает?

Сделайте в цикле перебор ордеров, и к каждому примените свои условия.

// Перебор в цикле всех ордеров

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?


avatar
90
Eugene1 20.10.2011 16:34

Где-нибудь можно найти как вычисляется функция iMA (или она засекреченная)

Особеннно меня интересует MODE_LWMA.

Хочу посмотреть и подправить на свой вкус, но что-то нагуглить исходники не получилось

 
forexnew:

Ну, конечно, ошибся:

TimeDayOfWeek(CurTime()-i*24*3600)==7

вместо 7 должно быть 0

Проверил, на счетах, которые уже больше недели. Вроде правильно показывает.

Ну не надо, так не надо. Если Ваш эксперт не контролирует свои ордера, так что он делает вообще? ...Торгует в тестере?
Причина обращения: