[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 239

 
IgorM:

iHighest и iLowest в помощь Вам, и алгоритм построения ЗЗ почитайте

ЗЫ:не самая простая задача, код будет небольшой, а вот алгоритм сложный, не могу найти код, но я так искал пик по High: High[iHighest(NULL,0,MODE_HIGH,i)

1. Что такое "33"?

2. High[iHighest(NULL,0,MODE_HIGH,i) даст одну точку. Как получить вторую?

iLowest != вторая точка.

 
charter:

1. Что такое "33"?

2. High[iHighest(NULL,0,MODE_HIGH,i) даст одну точку. Как получить вторую?


1. Зиг Заг

2. не даст, это даст только возможность найти несколько High для верхней линии, и потом нужно будет из найденных High выбрать два по которым и нужно будет провести линию

 
charter:

Сложность составляет нахождение программно точек, через которые впоследствии будет проведена линия.

Не сложно нарисовать линии, когда видишь эти точки. Как "увидеть" их программно?

Спасибо, исправил!

 
charter:

Сложность составляет нахождение программно точек, через которые впоследствии будет проведена линия.

Не сложно нарисовать линии, когда видишь эти точки. Как "увидеть" их программно?

Спасибо, исправил!

 

Доброго времени суток всем знатокам!

Помогите исправить код в советнике https://www.mql5.com/ru/code - Илан.

Смысл в том, что в советнике есть настраиваемый параметр просадки эквити при которой закрываем все ордера!

Но так как функция с локом позиций появилась позже, советник закрывает по старинке все открытые ордера по тренду, а локирующие позы не трогает. Так вот как исправить, чтобы при заданной просадке эквити закрывались все ордера?

Вот участок, который закрывает ордера(по тренду и локовые имеют разные магик номера). Тут все работает. Советник закрывает все ордера, НО. Просадка больше заданной раза в 4 и больше вплоть до слива депо:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Получается, что локовые ордера кроет, но не берет их во внимание, когда считается текущий профит и эквити?! Вот участок который считает профит текущий:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

А вот участок который считает эквити:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

Черным выделил участки, которые я добавил. Что забыл????? Почему не работает?????

 
polsvv:

Доброго времени суток всем знатокам!

Помогите исправить код в советнике https://www.mql5.com/ru/code - Илан.

Смысл в том, что в советнике есть настраиваемый параметр просадки эквити при которой закрываем все ордера!

Но так как функция с локом позиций появилась позже, советник закрывает по старинке все открытые ордера по тренду, а локирующие позы не трогает. Так вот как исправить, чтобы при заданной просадке эквити закрывались все ордера?

Вот участок, который закрывает ордера(по тренду и локовые имеют разные магик номера). Тут все работает. Советник закрывает все ордера, НО. Просадка больше заданной раза в 4 и больше вплоть до слива депо:

if (UseEquityStop) {

if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {

CloseThisSymbolAll(MagicNumber);

CloseThisSymbolAll(LMagN);

PrintF("Closed All due to Stop Out");

NewOrdersPlaced = FALSE;

Получается, что локовые ордера кроет, но не берет их во внимание, когда считается текущий профит и эквити?! Вот участок который считает профит текущий:

double CalculateProfit() {

double ld_ret_0 = 0;

for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == MagicNumber || OrderMagicNumber() == LMagN)

if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_ret_0 += OrderProfit();

}

return (ld_ret_0);

А вот участок который считает эквити:

double AccountEquityHigh() {

if ((CountTrades(MagicNumber) == 0) && (CountTrades(LMagN) == 0)) AccountEquityHighAmt = AccountEquity();

if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity;

else AccountEquityHighAmt = AccountEquity();

PrevEquity = AccountEquity();

return (AccountEquityHighAmt);

Черным выделил участки, которые я добавил. Что забыл????? Почему не работает?????

Может так нужно? :

//===================================================================================
double CalculateProfit() 
{
   double ld_ret_0 = 0;
   for (int cnt = 0; cnt < OrdersTotal(); cnt++) {
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()!=Symbol())           continue;
         if (OrderType()>1)                     continue;
         if (OrderMagicNumber()==MagicNumber || 
             OrderMagicNumber() == LMagN)       ld_ret_0 += OrderProfit();
         }
      else if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) {
         Print ("Func: CalculateProfit(), Select Order Error = ", GetLastError());
         break;
         }
      }
   return (ld_ret_0);
}
//===================================================================================
 
artmedia70:

Может так нужно?

так нужно вставлять код, чтоб его можно было читать
 
eddy:
так нужно вставлять код, чтоб его можно было читать
Да ну!?? И это все отличия, что смогли увидеть???
 
Всем привет!

Вот только на этих выхах первый раз пользуюсь тестером стратегий. Никак не могу понять, какая польза от функции "Оптимизация". Выбирал разные оптимизируемые параметры, а баланс не меняется. Что он по сути пытается оптимизировать и каким образом? Им кто-нибудь пользуется вообще? :)
 
AndrejFX:
Всем привет!

Вот только на этих выхах первый раз пользуюсь тестером стратегий. Никак не могу понять, какая польза от функции "Оптимизация". Выбирал разные оптимизируемые параметры, а баланс не меняется. Что он по сути пытается оптимизировать и каким образом? Им кто-нибудь пользуется вообще? :)

Попробуйте для начала воспользоваться F1.

Найдите Пользовательский интерфейс -> Тестер.

Может поможет https://www.mql5.com/ru/articles/mt4/tester

Причина обращения: