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

 
lottamer:


этот модификатор писал не я. 

я взял его готовым из библиотек.

поэтому и почистить не смогу. главное что он 100% рабочий.

а вот почему не оптимизируется параметр внутри него - вот это вопрос.....

принципиальных ошибок же нет!

остальной код рабочий.

поставьте любые условия по алгоритму. 

- купить 

-модифицировать

- закрыть

---------------------------

и попробуйте прооптимизировать параметр внутри МОДИФИКАЦИИ ордера - т.е. стоп и тейк 

Ну, раз рабочий, и тем более на 100% значит проблем в нем нет. Зачем тогда именно в нем искать ошибку? - Не в нем, значит, дело! - А раз ищите ошибку, значит, не на 100% уверены. Стало быть проблема уже не в коде, а в Ваших критериях оценки, т.к. они же Вас самого и запутывают. (Вы первый это начали : ))) я лишь подлил масла чуть-чуть...)

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

 
lottamer:

ну вот смотрите,

если я сейчас верну все назад , т.е. уберу внешние параметры  СТОП И ТЕЙК, а внутри функции пропишу вместо них числа, то советник прогнанный неделя за неделей в течение 10 недель , показывает четкие результаты. он делает ровно то что надо. проверял визуально сделку за сделкой.

И если я буду вручную менять параметры стопа и тейка - все будет работать и давать чуть другие результаты (это естественно )

 а вот теперь почему, когда я выношу эти параметры наружу модификатора - оптимизатор считает их незначительными? 

Так я Вам ровно об этом и пытаюсь сказать - что проблема, скорее всего, где-то еще, а не в этой функции. Значит, у Вас еще что-то путается. Возможно эти СЛ и ТП у вас применяются в каких-то других местах, которые как-то пересекаются или еще что-то... Мы может только гадать. - Именно поэтому и нужно смотреть весь код. И никто вам вслепую помочь не сможет. - Тут волшебников нету.

Видите, Вы задаете вопросы, а часть инфы необходимую для выявления причины, Вы недокладываете (разумно скрывая свое ноу-хау). - Как в примере с инклюдом. - Но как тогда в этом случае возможно помочь? - Ответ: никак. Вся помощь смысл теряет. Да еще и силы забирает.

 
Chiripaha:

Ну, раз рабочий, и тем более на 100% значит проблем в нем нет. Зачем тогда именно в нем искать ошибку? - Не в нем, значит, дело! - А раз ищите ошибку, значит, не на 100% уверены. Стало быть проблема уже не в коде, а в Ваших критериях оценки, т.к. они же Вас самого и запутывают. (Вы первый это начали : ))) я лишь подлил масла чуть-чуть...)

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

ищу в нем, потому что меняли мы ТОЛЬКО его и потому что именно в нем оптимизируемые параметры. 

как нечего оптимирировать? размер стопа и тейка оптимизируется!  

 
Chiripaha:

Так я Вам ровно об этом и пытаюсь сказать - что проблема, скорее всего, где-то еще, а не в этой функции. Значит, у Вас еще что-то путается. Возможно эти СЛ и ТП у вас применяются в каких-то других местах, которые как-то пересекаются или еще что-то... Мы может только гадать. - Именно поэтому и нужно смотреть весь код. И никто вам вслепую помочь не сможет. - Тут волшебников нету.

Видите, Вы задаете вопросы, а часть инфы необходимую для выявления причины, Вы недокладываете (разумно скрывая свое ноу-хау). - Как в примере с инклюдом. - Но как тогда в этом случае возможно помочь? - Ответ: никак. Вся помощь смысл теряет. Да еще и силы забирает.

понимаю...

надо взять паузу..и подумать...

посмотреть....

и даже кажется знаю где... 

 
lottamer:

ищу в нем, потому что меняли мы ТОЛЬКО его и потому что именно в нем оптимизируемые параметры. 

как нечего оптимирировать? размер стопа и тейка оптимизируется!  

: )))))) В чем они оптимизируются? в модификации ордера? - Не то Вы сейчас сказали.

Они должны оптимизироваться по отношению к программе, ее условиям - которые Вы надежно скрываете. А по отношению к отдельно взятому действию никак это не оптимизировать.

В этом случае просто разработчику приходится самостоятельно решать данные моменты. Мы все через это проходим, поверьте. : )) И я и другие коллеги. Нельзя попросить помощи и скрыть. Тогда придется раскрыть - в данном случае вообще обнародовать, т.к. форум публичный, - свои карты.
 
Chiripaha:

: )))))) В чем они оптимизируются? в модификации ордера? - Не то Вы сейчас сказали.

Они должны оптимизироваться по отношению к программе, ее условиям - которые Вы надежно скрываете. А по отношению к отдельно взятому действию никак это не оптимизировать.

В этом случае просто разработчику приходится самостоятельно решать данные моменты. Мы все через это проходим, поверьте. : )) И я и другие коллеги. Нельзя попросить помощи и скрыть. Тогда придется раскрыть - в данном случае вообще обнародовать, т.к. форум публичный, свои карты.

сейчас я подготовлю весь код и покажу........
 

вот код :

пара EURUSD 

 

//+------------------------------------------------------------------+
//|                                                           33.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
#include <b-Positions.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

extern  int  STOP = 100; 
extern  int  TAKE = 200;

double  Ma_1, Ma_2,  m2, m3; // m2 и m3 - это маркеры



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
Ma_1=iMA(NULL,PERIOD_M15,20, 0,MODE_SMA,PRICE_CLOSE,1) ;

Ma_2=iMA(NULL,PERIOD_M15,100,0,MODE_SMA,PRICE_CLOSE,1) ;





//=============================BUY_CONDITIONS=============================================
    

if (Ma_1>Ma_2 && m2==0)     {My_close();  My_buy ();  My_modify();  m2=1;   }  // закрыть если висят открытые позы   
                                                                                                   // и открыть новую
//=============================SELL_CONDITIONS=============================================
 
if (Ma_1<Ma_2 && m3==0)     {My_close();  My_sell ();  My_modify();  m3=1;  }    
 
//======================================

if  ( OrdersTotal()==0 && (m2==1 || m3==1)) {m2=0; m3=0;}  // обнуляет маркеры при закрытии позиций,
                                                           // что дает возможность открывать снова
//==============переход в безубыток ========================
   
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   
if  (OrderProfit()>0.5)  {My_modify_close_zero ();}


return(0);
  }

//============================функция  ПРОДАТЬ==============================================

int My_sell()
{
    OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 0, 0, CLR_NONE);

}
return;

///==================================КУПИТЬ==========================================
int My_buy ()
{
     OrderSend (Symbol( ), OP_BUY, 0.01 ,Ask, 0, 0, 0, NULL, 0, 0, CLR_NONE);
}
return;


//+---------------------МОДИФИЦИРОВАТЬ сделку сразу по открытии---------------------------------------------+


int My_modify()
 {
   bool   result;
   double take_profit,stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice()-STOP*point;
               else            stop_loss=OrderOpenPrice()+STOP*point;
               
                if(cmd==OP_BUY) take_profit=OrderOpenPrice()+TAKE*point;
                           else take_profit=OrderOpenPrice()-TAKE*point;
               
               
               result=OrderModify(OrderTicket(),0,stop_loss, take_profit,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//            break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }

   return(0);
  }
  
  
//==============================выставить стопы в безубыток============================================================
int My_modify_close_zero ()
{
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice();
               else            stop_loss=OrderOpenPrice();
               
               result=OrderModify(OrderTicket(),OrderOpenPrice(),stop_loss,OrderTakeProfit(),0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }
//----
   return(0);
  }

  
//=================ЗАКРЫТЬ СДЕЛКУ=======================================================
int My_close()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
 
lottamer:

вот код :

пара EURUSD 

b-Positions.mqh прикрепите - иначе не запустить - не увидеть работы проги.
 
Chiripaha:
b-Positions.mqh прикрепите - иначе не запустить - не увидеть работы проги.

Файлы:
b-positions.mqh  90 kb
 
lottamer:
У меня вопрос такой - а зачем вам тогда этот файл инклудом, если все необходимые функции у Вас в самом советнике присутствуют? Вы что-то еще планировали сделать?
Причина обращения: