Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 235

 

Ну и конечно открывая следующий бай мы сразу переносим (StopLoss равен наша средняя цена + 50 пунктов) по все позициям.

Вот он то падлец иногда и не встает на последнюю позицию. Было 3 позиции открылась 4 тая. По трем StopLoss перенесли а на четвертую забыл поставить.

DedZone по идеи должна выдерживаться:

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

Просчет DedZone стоит в инициализации эксперта.

 
Limita:

Ну и конечно открывая следующий бай мы сразу переносим (StopLoss равен наша средняя цена + 50 пунктов) по все позициям.

Вот он то падлец иногда и не встает на последнюю позицию. Было 3 позиции открылась 4 тая. По трем StopLoss перенесли а на четвертую забыл поставить.

DedZone по идеи должна выдерживаться:

Просчет DedZone стоит в инициализации эксперта.

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

А когда и то и то равно нулю, то что? В Альпари в таком случае спред*2 используется.

И вы мне не ответили на вопрос о логике тех строчек.

 
ALXIMIKS:

перебор лучше делать так (кто-то писал что у него были проблемы при вашем варианте перебора при модификации или удалении ордеров) :

И зачем масло-масленное ??? (оставьте что-то одно)


Спасибо!

Вроде договорились с экспертом :))

 
artmedia70:

И вы мне не ответили на вопрос о логике тех строчек.


artmedia70:

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

Для себя уясните пока, что таким блоком может быть некоторое количество строк, заключённых в фигурные скобки:

Если (условие) {при истинности условия исполняется блок, заключенный в эти скобки}

Иначе {если условие выше не истинно, то исполняется блок, заключенный в эти скобки}

Если после условия нет фигурных скобок, то блоком, исполняемым при истинности условия будет одна-единственная строка, идущая непосредственно сразу за условием:

Если (условие) Выполняется эта строка

Иначе Выполняется эта строка

В моих примерах Если - это if, Иначе - это else

Взято тут

 
artmedia70:

А когда и то и то равно нулю, то что? В Альпари в таком случае спред*2 используется.

И вы мне не ответили на вопрос о логике тех строчек.



Спасибо за информацию относительно Альпари.

Относительно Логики строчек то ответил АLXIMIKS.

Добавлю от себя что В том случае модификация должна происходить только если все условия истинны. Если же хоть одно выпадает идем дальше.

 
Limita:


Спасибо за информацию относительно Альпари.

Относительно Логики строчек то ответил АLXIMIKS.

Добавлю от себя что В том случае модификация должна происходить только если все условия истинны. Если же хоть одно выпадает идем дальше.

Он мне показал зачем-то мои же слова, написанные когда-то кому-то.

Я и хотел от вас добиться ответа на вопрос о логике. У вас все if () в том блоке кода идут друг за другом. А это значит, что при истинности первого условия выполнится и второе, при истинности второго, выполнится и третье и т.д., но... Если первое условие не истинно, то не выполнится второе, но третье уже опять будет проверяться.

Может как-то так, всё-таки нужно:

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

Это только мои догадки, т.к., я совершенно не знаю по какой логике у вас замыслено всё и не знаю что выполняют и содержат/возвращают некоторые переменные и функции.

 
artmedia70:

1) Он мне показал зачем-то мои же слова, написанные когда-то кому-то.

2) Я и хотел от вас добиться ответа на вопрос о логике. У вас все if () в том блоке кода идут друг за другом. А это значит, что при истинности первого условия выполнится и второе, при истинности второго, выполнится и третье и т.д., но... Если первое условие не истинно, то не выполнится второе, но третье уже опять будет проверяться.

1) ну это было всем, не только вам.

2) вы когда-то уже делали данное утверждение, несколько дней тому назад, вот только с своей стороны забыл тогда перепроверить данную инфу.

Сейчас сделал простой скрипт:

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

И оказалось вы не правы: НЕ БУДЕТ АЛЕРТА !!!

 
ALXIMIKS:

1) ну это было всем, не только вам.

2) вы когда-то уже делали данное утверждение, несколько дней тому назад, вот только с своей стороны забыл тогда перепроверить данную инфу.

Сейчас сделал простой скрипт:

И оказалось вы не правы: НЕ БУДЕТ АЛЕРТА !!!

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

Что ж, согласен. В данном случае я погорячился, написав ранее о том, что и как будет исполняться во вложенных условиях без фигурных скобок. В данной ситуации вы правы. Знаете почему?

А попробуйте добиться выполнения else в вашем коде.

 
artmedia70:

Что ж, согласен. В данном случае я погорячился, написав ранее о том, что и как будет исполняться во вложенных условиях без фигурных скобок. В данной ситуации вы правы. Знаете почему?

А попробуйте добиться выполнения else в вашем коде.


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

ни какого Алерта от данного скрипта. Else относится к условию " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Подтверждения :

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

имеем Алерт: "а=0".

Результат - обработка невыполнения условия возможно только для последнего условия при неиспользовании фигурных скобок "{" во время перечисления определенного ряда условий.

 
ALXIMIKS:

ни какого Алерта от данного скрипта. Else относится к условию " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Подтверждения :

имеем Алерт: "а=0".

Результат - обработка невыполнения условия возможно только для последнего условия при неиспользовании фигурных скобок "{" во время перечисления определенного ряда условий.


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

Попробуйте вот с этим разобраться:

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

А после, разберитесь к чему else относится:

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");