Помогите решить

 
В приведённой мною функции я модифицирую стоповые ордера в зависимости от трендов на разных таймфреймах но дело до нижних условий кода почемуто не доходит если разбить на несколько функций работает но хотелось бы одной т.к. код начал утежеляться .
void ModifyStopLossBuyM15(int mag)
  { 
  for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;  
     if(OrderSymbol()!=Symbol())continue;
     if( OrderMagicNumber()!=mag)continue;
      {           
       if(OrderType()==OP_BUY&&OpenLongShortM5()==OP_BUY&&TrendM15()==OP_SELL&&TrendH1()==OP_BUY&&ProfitPR(mag)<0)
        {
        double StopLossUP = NormalizeDouble (Ask-TrailingStop*Point,Digits);  
        if(OrderStopLoss()!= StopLossUP)
        RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(),StopLossUP,0,0);    
        }
       if(OrderType()==OP_BUY &&OpenLongShortM5()==OP_SELL&& TrendM15()==OP_BUY&&TrendH1()==OP_BUY)
        { 
        double StopLossH1=GlobalVariableGet(UpTrendH1)-10*Point;              
        if(OrderStopLoss()!=StopLossH1)
        RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(),StopLossH1,0,0); 
        }
       if(OrderType()==OP_BUY &&OpenLongShortM5()==OP_SELL&& TrendM15()==OP_BUY&&TrendH1()==OP_SELL)
        { 
        double StopLossM15= GlobalVariableGet(UpTrendM15)-10*Point;              
        if (OrderStopLoss()!= StopLossM15)
        RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(), StopLossM15,0,0);
        } 
        if(OrderType()==OP_BUY&&OpenLongShortM5()==OP_SELL&& TrendM15()==OP_SELL&&TrendH1()==OP_BUY)
        {
        StopLossH1=GlobalVariableGet(UpTrendH1)-10*Point;               
        if (OrderStopLoss()!= StopLossH1) 
        RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(), StopLossH1,0,0);
}}}}
 
lovova:
В приведённой мною функции я модифицирую стоповые ордера в зависимости от трендов на разных таймфреймах но дело до нижних условий кода почемуто не доходит если разбить на несколько функций работает но хотелось бы одной т.к. код начал утежеляться .
От разбиения на функции код становится легче, а не тяжелее.
Потому что есть возможность не повторять одинаковые куски кода несколько раз.
 
if(OrderType()==OP_BUY){
   if(OpenLongShortM5()==OP_BUY){
      if(TrendM15()==OP_SELL){
         if(TrendH1()==OP_BUY){
            if(ProfitPR(mag)<0){
               double StopLossUP = NormalizeDouble (Ask-TrailingStop*Point,Digits);  
               if(OrderStopLoss()!= StopLossUP) RefreshRates();
               OrderModify(OrderTicket(),OrderOpenPrice(),StopLossUP,0,0);    
    }}}}
    else if (OpenLongShortM5()==OP_SELL){
      if(TrendM15()==OP_BUY){
          if(TrendH1()==OP_BUY){
             double StopLossH1=GlobalVariableGet(UpTrendH1)-10*Point;              
             if(OrderStopLoss()!=StopLossH1)RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(),StopLossH1,0,0); 
    }}}
попробуйте условия составлять так  - меньше путаници, скорость обработки выше, надежность срабатывания условия то-же выше
 
TrendM15()==OP_BUY && TrendH1()==OP_SELL)
 
TrendM15()==OP_SELL && TrendH1()==OP_BUY
Такие совпадения не часто случаются
 
komposter:
lovova:
В приведённой мною функции я модифицирую стоповые ордера в зависимости от трендов на разных таймфреймах но дело до нижних условий кода почемуто не доходит если разбить на несколько функций работает но хотелось бы одной т.к. код начал утежеляться .
От разбиения на функции код становится легче, а не тяжелее.
Потому что есть возможность не повторять одинаковые куски кода несколько раз.

Понял спасибо .Ответь тогда пожайлуста ешё на один вопрос у меня только один из трех экспертов начал разрастаться до 70кб. Все таки какие разумные пределы эксперта как размер влияет на устойчивость к ошибкам в торговле.
 
xeon:
if(OrderType()==OP_BUY){
   if(OpenLongShortM5()==OP_BUY){
      if(TrendM15()==OP_SELL){
         if(TrendH1()==OP_BUY){
            if(ProfitPR(mag)<0){
               double StopLossUP = NormalizeDouble (Ask-TrailingStop*Point,Digits);  
               if(OrderStopLoss()!= StopLossUP) RefreshRates();
               OrderModify(OrderTicket(),OrderOpenPrice(),StopLossUP,0,0);    
    }}}}
    else if (OpenLongShortM5()==OP_SELL){
      if(TrendM15()==OP_BUY){
          if(TrendH1()==OP_BUY){
             double StopLossH1=GlobalVariableGet(UpTrendH1)-10*Point;              
             if(OrderStopLoss()!=StopLossH1)RefreshRates();
        OrderModify(OrderTicket(),OrderOpenPrice(),StopLossH1,0,0); 
    }}}
попробуйте условия составлять так - меньше путаници, скорость обработки выше, надежность срабатывания условия то-же выше
Спасибо попробую.
 
lovova:
Ответь тогда пожайлуста ешё на один вопрос у меня только один из трех экспертов начал разрастаться до 70кб. Все таки какие разумные пределы эксперта
Разумные пределы - не в килобайтах, а в логике.

lovova:
как размер влияет на устойчивость к ошибкам в торговле.
Размер - никак. Влияет качество.
 
Integer:
TrendM15()==OP_BUY && TrendH1()==OP_SELL)
 
TrendM15()==OP_SELL && TrendH1()==OP_BUY
Такие совпадения не часто случаются
Такая логика построения эксперта в зависимости от индикаторов
 
komposter:
lovova:
Ответь тогда пожайлуста ешё на один вопрос у меня только один из трех экспертов начал разрастаться до 70кб. Все таки какие разумные пределы эксперта
Разумные пределы - не в килобайтах, а в логике.

lovova:
как размер влияет на устойчивость к ошибкам в торговле.
Размер - никак. Влияет качество.

Спасибо успокоил