[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 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:

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

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

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

[Deleted]  

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

Помогите исправить код в советнике 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:
так нужно вставлять код, чтоб его можно было читать
Да ну!?? И это все отличия, что смогли увидеть???
[Deleted]  
Всем привет!

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

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

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

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

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