Знатоки програмирования подскажите.....

 
необходимо написать индикатор и эксперта.
Индикатор:
анализируется средний бар из 3х
(1) показывается значение максимальное Н из 3х + дельта
(2) показывается значение минимальное L из 3х - дельта

Тоесть своего рода усеченный фрактал.

Эксперт1:

заход Long по (1)
заход Short по (2)

реверсивная система с оптимизируемым параметром "дельта"

Эксперт2:

Эксперт1+трелинг

Заранее спасибо.
 

Знатоки програмирования подскажите.....


Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...

С правой стороны редактора вкладка Dictionary с описанием языка MQL4
 

Знатоки програмирования подскажите.....


Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...

С правой стороны редактора вкладка Dictionary с описанием языка MQL4


Правельно говорят ответ программиста всегда точен, но зачастую бесполезен.
 

Знатоки програмирования подскажите.....


Кнопка "Пуск" > Программы > Metа Trader > MetaEditor > Главное меню > File > New > Custom Indicator..., Expert Advisor...

С правой стороны редактора вкладка Dictionary с описанием языка MQL4


Для того что бы писать надо хотябы немного разбираться в програмировании......
А я в этом полный зеро ....... Самое сложное что я програмировал это системки для омеги ресетч (там все очень просто)....... про чем это было жутко давно.
 
Ник вызывает подозрения.
 
Lohinson, а как дельта считается?
 
Ник вызывает подозрения.

Ник с историей....http://konkop.narod.ru/renko.htm


Lohinson, а как дельта считается?


дельта - это простое не расчитываемое число, получаемое в результате оптимизации, равное количеству пипсов (+/-) приращения к максимальному/минимальному H/L из 3х баров
дельта - для лонга и шорта одинакова .....
дельта - единственный оптимизируемый параметр
 
Ник вызывает подозрения.

Ник с историей....http://konkop.narod.ru/renko.htm


Lohinson, а как дельта считается?


дельта - это простое не расчитываемое число, получаемое в результате оптимизации, равное количеству пипсов (+/-) приращения к максимальному/минимальному H/L из 3х баров
дельта - для лонга и шорта одинакова .....
дельта - единственный оптимизируемый параметр


Ты знаешь, я тебе как программист скажу - эта фигня будет отлично сливать депозит.
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); 
if(true) OpenSell();
 



хотя нечто подобное уже не раз делалось на МТ4, вот например этот советник очень похож на то что ты описываешь, но посложнее конечно, и прибыль реально приносит:
работают на EURUSD H1.

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
#property copyright "Dan"
#property link      "3172552@gmail.com"
#include <stdlib.mqh>
#define MN_8   8
#define MN_12  12

//---- input parameters


extern int       Hours2Check=     9;       //9      //14    //15
extern int       CloseHour=       9;       //9      //9     //9
extern int       DaysMode=        1;       //1      //2     //2
extern int       Days2Check=      9;//14   //7      //14    //10
extern int       CheckMode=       1;       //2      //1     //2
extern double    LossK=           2;       //1      //2     //0.5
extern double    ChannelK=        1.5;     //0.5    //1.5   //0.5

extern int       CheckHour_8=     8;       //8      //8     //8
extern double    ProfitK_8=       2;       //1      //2     //1
extern double    OffsetK_8=       2;       //1      //2.5   //1.5

extern int       CheckHour_12=    12;      //12     //12    //12
extern double    ProfitK_12=      3;       //0.5    //4     //0.5
extern double    OffsetK_12=      2.5;     //1      //2.5   //1
extern int       MarginPercent=   20;
extern bool      UseMM=           true;
extern int TradesPerDayAllowed=   1;
//////////////////////////////////////////////////////////////////////////
 
//////////////////////////////////////////////////////////// 
int MaxSystemDD=200; //here You have to insert max dd without MM in pips
int SystemTrustK=1;
int MaxDD_Allowed=10;
double Lots=0.1;
int LatestOpenHour=22;
int MaxTries=10;
int PointPrice=10;
double ISK=1.5;
/////////////////////////////////////////////////////
int Pause;
int err;
int try;
int ticket;
bool close;
int i;
int OpenDay; 
int p;
int InsuranceStop;
int loss;
int D2Ch;

int pp_8;
int profit_8;
int offset_8;
int avrange_8;
int CheckDay_8;

int pp_12;
int profit_12;
int offset_12;
int avrange_12;
int CheckDay_12;

double sellprice_8;
double buyprice_8;
double daj_8;
double hh_8;
double ll_8;
double totalrange_8;
double channel_8;

double sellprice_12;
double buyprice_12;
double daj_12;
double hh_12;
double ll_12;
double totalrange_12;
double channel_12; 
//////////////////////////////////////////////////////////// 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  D2Ch=Days2Check; 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
/////////////////////////////////////////////////////////////////////
void Levels_Defining_12()
{ 
    pp_12=(((CheckHour_12-CheckHour_8)*60)/Period());
    hh_12=High[Highest(NULL,0,MODE_HIGH,pp_12,1)];
    ll_12=Low[Lowest(NULL,0,MODE_LOW,pp_12,1)];
    p=((24*60)/Period());
    totalrange_12=0; 
    channel_12=hh_12-ll_12;
    
    if (CheckMode==1)

      {
        for(i=1;i<=Days2Check;i++)
        {
          daj_12=(High[Highest(NULL,0,MODE_HIGH,p,p*(i-1)+1)]
                  -Low[Lowest(NULL,0,MODE_LOW,p,p*(i-1)+1)]);
          totalrange_12=totalrange_12+daj_12;
        }
      }
   
    if (CheckMode==2)
      {
        for( i=1;i<=Days2Check;i++)
        {
          daj_12=MathAbs(Close[p*i+pp_12]-
                         Close[p*(i-1)+pp_12]);
          totalrange_12=totalrange_12+daj_12;
          
        }
      } 
    avrange_12=MathRound((totalrange_12/Days2Check)/Point);
    offset_12=MathRound(avrange_12/OffsetK_12);
    sellprice_12=NormalizeDouble(ll_12-offset_12*Point,4);
    buyprice_12=NormalizeDouble(hh_12+offset_12*Point,4); 
    return;
} 
//*/*
///////////////////////////////////////////////////////////// 
void Levels_Defining_8()
{ 
    pp_8=((Hours2Check*60)/Period());
    hh_8=High[Highest(NULL,0,MODE_HIGH,pp_8,1)];
    ll_8=Low[Lowest(NULL,0,MODE_LOW,pp_8,1)];
    p=((24*60)/Period());
    totalrange_8=0; 
    channel_8=hh_8-ll_8;
    
    if (CheckMode==1)

      {
        for(i=1;i<=Days2Check;i++)
        {
          daj_8=(High[Highest(NULL,0,MODE_HIGH,p,p*(i-1)+1)]
                  -Low[Lowest(NULL,0,MODE_LOW,p,p*(i-1)+1)]);
          totalrange_8=totalrange_8+daj_8;
        }
      }
  
    if (CheckMode==2)
      {
        for( i=1;i<=Days2Check;i++)
        {
          daj_8=MathAbs(Close[p*i+pp_8]-
                         Close[p*(i-1)+pp_8]);
          totalrange_8=totalrange_8+daj_8;
          
        }
      } 
    avrange_8=MathRound((totalrange_8/Days2Check)/Point); 
    offset_8=MathRound(avrange_8/OffsetK_8);
    sellprice_8=NormalizeDouble(ll_8-offset_8*Point,4);
    buyprice_8=NormalizeDouble(hh_8+offset_8*Point,4); 
    return;
} 
//*/*
/////////////////////////////////////////////////////////////_8     
void Close_by_Closetime()    
{
    for(i=0;i<OrdersTotal();i++)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
    if((OrderMagicNumber()!=MN_8 && OrderMagicNumber()!=MN_12) || OrderSymbol()!=Symbol() ) continue;
          

    if (OrderType()==OP_BUY)
      {
      for(int try=1;try<=MaxTries;try++)
        {
        while (!IsTradeAllowed()) Sleep(5000);
        close=false;
        RefreshRates();
        close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
        Sleep(Pause);
        
        if (close){Pause=1000;break;}
        else
          {
          err=GetLastError(); 
          Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
            break;
            }
          }
        }
      }  
      
    
      
  if (OrderType()==OP_SELL)
    {
    for(try=1;try<=MaxTries;try++)
      {
      while (!IsTradeAllowed()) Sleep(5000);
      close=false;
      RefreshRates();
      close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
      Sleep(Pause);
      
      if (close){Pause=1000;break;}
      else
        {
        err=GetLastError(); 
        Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
        Pause=Pause*2;
        if (try==MaxTries) 
          {
          Pause=1000;
          Print("Warning!!!Last try failed!");
          SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
          break;
          }
        }
      }  
    }    

  }

}
///////////////////////////////////////////////////////////////*/    

///////////////////////////////////////////////////////////////
void Close_by_Stops_8()  
{
  for(i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
    if(OrderMagicNumber()!=MN_8 || OrderSymbol()!=Symbol()) continue;
          
    if ((OrderType()==OP_BUY)
    && (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=profit_8*Point)
    || ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=loss*Point))) 
      {
      for(int try=1;try<=MaxTries;try++)
        {
        while (!IsTradeAllowed()) Sleep(5000);
        close=false;
        RefreshRates();
        close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
        Sleep(Pause);
        
        if (close){Pause=1000;break;}
        else
          {
          err=GetLastError(); 
          Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
            break;
            }
          }
        }
      }  
    
  if ((OrderType()==OP_SELL)
  && (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=loss*Point)
  || ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=profit_8*Point))) 

   {
    for(try=1;try<=MaxTries;try++)
      {
      while (!IsTradeAllowed()) Sleep(5000);
      close=false;
      RefreshRates();
      close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
      Sleep(Pause);
       
      if (close){Pause=1000;break;}
      else
        {
        err=GetLastError();
        Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
        Pause=Pause*2;
        if (try==MaxTries) 
          {
          Pause=1000;
          Print("Warning!!!Last try failed!");
          SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
          break;
          }
        }
      }  
    }    
        
    
  }
}
//////////////////////////////////////////////////*/

void Close_by_Stops_12()  
{
  for(i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
    if(OrderMagicNumber()!=MN_12 || OrderSymbol()!=Symbol()) continue;
          
    if ((OrderType()==OP_BUY)
    && (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=profit_12*Point)
    || ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=loss*Point))) 
      {
      for(int try=1;try<=MaxTries;try++)
        {
        while (!IsTradeAllowed()) Sleep(5000);
        close=false;
        RefreshRates();
        close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,White);
        Sleep(Pause);
        
        if (close){Pause=1000;break;}
        else
          {
          err=GetLastError(); 
          Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
            break;
            }
          }
        }
      }  
        
      
    
  if ((OrderType()==OP_SELL)
  && (((Close[1]-NormalizeDouble(OrderOpenPrice(),4))>=loss*Point)
  || ((NormalizeDouble(OrderOpenPrice(),4)-Close[1])>=profit_12*Point))) 

   {
    for(try=1;try<=MaxTries;try++)
      {
      while (!IsTradeAllowed()) Sleep(5000);
      close=false;
      RefreshRates();
      close=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,White);
      Sleep(Pause);
       
      if (close){Pause=1000;break;}
      else
        {
        err=GetLastError();
        Print("OrderClose failed with error #",err," : ",ErrorDescription(err),"Trying Again #",try);
        Pause=Pause*2;
        if (try==MaxTries) 
          {
          Pause=1000;
          Print("Warning!!!Last try failed!");
          SendMail("Warning!!!Last try failed!  ",OrderType()+" by "+OrderClosePrice()+" Cloing Failed!");
          break;
          }
        }
      }  
    }    
        
    
  }
}
//////////////////////////////////////////////////*/
double LotSizeCounting(int OpTime){
 Lots=0.1;
 if (UseMM==true){
  if (OpTime==8){
  Lots=NormalizeDouble(((AccountFreeMargin()/100000)*MarginPercent),1);Print(Lots);
  }
  if (OpTime==12){
  Lots=NormalizeDouble((AccountFreeMargin( )/100000)*MarginPercent,1);
  }
  if (Lots<0.1){
  Print("Too risky Trade! Add some money to account");
  SendMail("Too risky Trade! Add some money to account","Too risky Trade! Add some money to account");
  Lots=0.1;
  }
  if (Lots>10000){
  Print("Too big Lot ",Lots);
  SendMail("Too big Lot ","Too big Lot ");
  Lots=10000;
  }    
 }
 return(Lots);
}

////////////////////////////////////////////////////////////////////////////////  
void Opening_8()

{ 
  profit_8=MathRound(avrange_8/ProfitK_8);
  loss=MathRound(avrange_8/LossK);
  InsuranceStop=MathRound(loss*ISK);
  
  
  Lots=LotSizeCounting(8);
  
  if (Close[1]>=buyprice_8) 
  {
    for (int try=1;try<=MaxTries;try++)
       {
       while (!IsTradeAllowed()) Sleep(5000);
       RefreshRates();
       
       ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,4),3,NormalizeDouble(Ask-InsuranceStop*Point,4),1.5,"Order 8-series Open",MN_8,Blue);
       Sleep(Pause);
       
       if (ticket>0){OpenDay=Day();Pause=1000;break;}
       else
          {
          err=GetLastError();
          Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
            break;
            }
          }
       }
  }   
       
    
  
  if (sellprice_8>=Close[1])
  {
    for (try=1;try<=MaxTries;try++)
       {
       while (!IsTradeAllowed()) Sleep(5000);
       RefreshRates();
       ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,NormalizeDouble(Bid+InsuranceStop*Point,4),0.5,"Order 8-series Open",MN_8,Red);
       Sleep(Pause);
       
       if (ticket>0){OpenDay=Day();Pause=1000;break;}
       else
          {
          err=GetLastError();
          Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
            break;
            }
          }
        }
    }    
         
    
}    

/////////////////////////////////////////////////////////////////////     
void Opening_12()

{    
  profit_12=MathRound(avrange_12/ProfitK_12);
  loss=MathRound(avrange_12/LossK);
  InsuranceStop=MathRound(loss*ISK);

  Lots=LotSizeCounting(12);

  if (Close[1]>=buyprice_12) 
  {
    for (int try=1;try<=MaxTries;try++)
       {
       while (!IsTradeAllowed()) Sleep(5000);
       RefreshRates();
       ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,4),3,NormalizeDouble(Ask-InsuranceStop*Point,4),1.5,"Order 12-series Open",MN_12,Blue);
       Sleep(Pause);
       
       if (ticket>0){OpenDay=Day();Pause=1000;break;}
       else
          {
          err=GetLastError();
          Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
            break;
            }
          }
       }
  }   
   
  
  if (sellprice_12>=Close[1])
  {
    for (try=1;try<=MaxTries;try++)
       {
       while (!IsTradeAllowed()) Sleep(5000);
       RefreshRates();
       ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,4),3,NormalizeDouble(Bid+InsuranceStop*Point,4),0.5,"Order 12-series Open",MN_12,Red);
       Sleep(Pause);
       
       if (ticket>0){OpenDay=Day();Pause=1000;break;}
       else
          {
          err=GetLastError();
          Print("OrderSend failed with error #",err," : ",ErrorDescription(err),"Trying again #",try);
          Pause=Pause*2;
          if (try==MaxTries) 
            {
            Pause=1000;
            Print("Warning!!!Last try failed!");
            SendMail("Warning!!!Last try failed!",OrderType()+" by "+OrderOpenPrice()+" Opening failed!");
            break;
            }
          }
        }
    }    
         
    
}    

/////////////////////////////////////////////////////////////////////
   
////////////////////////////////////////////////////////////////////
 
void start()
   
{   
      if (Period()!=60) return; 
      
      if (DaysMode==2) {Days2Check=DayOfWeek()+D2Ch;}
      if (Hour()==CheckHour_8 && Day()!=CheckDay_8)
      {Levels_Defining_8(); CheckDay_8=Day();}
     
      if (Hour()==CheckHour_12 && Day()!=CheckDay_12)
      {Levels_Defining_12(); CheckDay_12=Day();}
   
      if  (OrdersTotal()>0)
      {
      Close_by_Stops_8();
     
      Close_by_Stops_12(); 
     
      if ((Hour()>=CloseHour) && (Day()!=OpenDay) )
       {Close_by_Closetime();Close_by_Closetime();}
       
      }
  
      if  (Hour()>LatestOpenHour || Day()==OpenDay) return;
      {
      if  (Day()==CheckDay_8 && (channel_8<(avrange_8/ChannelK)*Point)) {Opening_8(); }
      if  (OrdersTotal()==TradesPerDayAllowed) return;
      if  (Day()==CheckDay_12 &&(channel_12<(avrange_12/ChannelK)*Point)) {Opening_12(); }
      }
     
}     

/////////////////////////////////////////////////////////
//   Lots=NormalizeDouble(MathSqrt(100*channel_8),1);
//  Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/((loss)*SystemTrustK*PointPrice),1);
//  Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/(MaxSystemDD*SystemTrustK*PointPrice),1);
//  Print(Lots);


//   Lots=NormalizeDouble(MathSqrt(100*channel_12),1);
//  Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/((loss)*SystemTrustK*PointPrice),1);
//  Lots=NormalizeDouble(((AccountFreeMargin( )/100)*MaxDD_Allowed )/(MaxSystemDD*SystemTrustK*PointPrice),1);




или вот еще один, из той же оперы, тоже прибыльный.

 
//+------------------------------------------------------------------+
//|                                                  NEWbreakout.mq4 |
//|                                                              Dan |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
//3-6-3-32-2-x-x-100-120
//3-6-3-32-2-x-x-70-150 
//3-6-3-32-1-0.8-0.5-x-x

#property copyright "Dan"
#property link      "https://www.metaquotes.net"


extern int periodK=3;
extern int channelK=6;
extern double offsetK=3;
extern int per1od=32;
extern int plMODE=2;
extern double profitK=7;
extern double lossK=1;
extern int StopLoss=100;
extern int TakeProfit=120;
extern double Lots = 0.1;
extern string _Parameters_b_Lots = "Параметры модуля расчёта лота";
extern int LotsWayChoice  = 1;    // Способ выбора рабочего лота: 
                                  //  0-фиксированный, 
                                  //  1-процент от депозита, 
                                  //  2-фракционно-пропорциональный, 
                                  //  3-фракционно-фиксированный, 
extern double LotsPercent=40;   // Процент от депозита 
extern double LotsDeltaDepo=500;  // Коэффициент приращения депозита 
extern double LotsDepoForOne=500;  // Размер депозита для одного минилота 
extern double LotsMax=10000; // Максимальное количество минилотов 
extern string x= "------------------------------";
//============================
double bigchannel;
double smallchannel,dlots;
int b;
double hi;
double lo;
double offset;
double sellprice;
double buyprice;
int profit;
int loss;
int i;

/*
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }*/
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
{    
dlots=GetSizeLot();
//---- 
  if (b!=Bars)
  {

  bigchannel=
  (High[Highest(NULL,0,MODE_HIGH,per1od,1)]-
  Low[Lowest(NULL,0,MODE_LOW,per1od,1)]);
  smallchannel=
  (High[Highest(NULL,0,MODE_HIGH,MathRound(per1od/periodK),1)]-
  Low[Lowest(NULL,0,MODE_LOW,MathRound(per1od/periodK),1)]);
    b=Bars;
  if (plMODE==1)
    { 
     profit=MathRound((bigchannel/profitK)/Point);
     loss=MathRound((bigchannel/lossK)/Point);
    }
  if (plMODE==2)
    {
     profit=TakeProfit;
     loss=StopLoss;
    }
  if (((bigchannel*Point)/(smallchannel*Point))>=channelK)
    {  
    hi=High[Highest(NULL,0,MODE_HIGH,MathRound(per1od/periodK),1)];
    lo=Low[Lowest(NULL,0,MODE_LOW,MathRound(per1od/periodK),1)];
    offset=(bigchannel/offsetK);
    sellprice=(lo-offset);
    buyprice=(hi+offset);
    }
    if (OrdersTotal()<1)
    {

    if (Close[1]>=buyprice)
      {
       
      OrderSend(Symbol(),OP_BUY,dlots,Ask,3,0,10,"",0,0,Blue);
      }       
    if (Close[1]<=sellprice)
      {
      OrderSend(Symbol(),OP_SELL,dlots,Bid,3,10,0,"",0,0,Red);
      }
    }
/* */ 
  if (OrdersTotal()>0)
    {
    for(i=0;i<OrdersTotal();i++)
          {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
          if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
          

          if ((OrderType()==OP_BUY)
          && (((Close[1]-OrderOpenPrice())>=profit*Point)
          || ((OrderOpenPrice()-Close[1])>=loss*Point))
          || (Close[1]<=sellprice)) 
            {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
            
            break;
            }
          if ((OrderType()==OP_SELL)
          && (((Close[1]-OrderOpenPrice())>=loss*Point)
          || ((OrderOpenPrice()-Close[1])>=profit*Point))
          || (Close[1]>=buyprice)) 
            {
            OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
            
            break;
            }
          }
     }


///----   
//}
  
} 
} 
//+------------------------------------------------------------------+
double GetSizeLot() { 
  double dLot; 
  if (LotsWayChoice==0) dLot=Lots; 
    Print("0    ",dLot); 
  // фиксированный процент от депозита 
  if (LotsWayChoice==1) { 
    dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
    Print("1    ",dLot); 
  } 

  // фракционно-пропорциональный 
  if (LotsWayChoice==2) {   
    int k=LotsDepoForOne; 
    for (double i=2; i<=LotsMax; i++) { 
      k=k+i*LotsDeltaDepo; 
      if (k>AccountFreeMargin()) { 
        dLot=(i-1)/10; break; 
      } 
    }
    Print("2    ",dLot); 
  } 

  // фракционно-фиксированный 
  if (LotsWayChoice==3) {
   
    dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10; 
      Print("3    ",dLot); 

  } 

  if (dLot<0.1)  dLot=0.1;
  if (dLot>LotsMax) dLot=LotsMax;
   
  return(NormalizeDouble(dLot,1));  
  } 



и еще один :)

//+------------------------------------------------------------------+
//|   9-0-7-1-2-2-2-1                                 ttt.mq4 |
//|   9-0-2-1-2-1-2.5                                    Dan |
//|   9-0-9-2-1-1-1-1
//    9-0-6-1-2-2-2-1(m15)                  https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Dan"
#property link      "https://www.metaquotes.net"
#define MAGICMA  20050610

//---- input parameters
extern int       checkhour=8;
extern int       checkminute=0;
extern int       days2check=7;
extern int       checkmode=1;
extern double    profitK=2;
extern double    lossK=2;
extern double    offsetK=2;
extern int       closemode=1;

//+------------------------------------------------------------------+
int latestopenhour=23;

int       tradesallowed=1;
double sellprice;
double buyprice;
int profit;
int loss;
int offset;
int avrange;
double daj[30];
int i;
int dd;
int bb; 
int d; 
int pp;
double hh;
double ll;
int p;
double totalrange;
//============================================================ 
void start()
   
{  
   if 
  (Bars==bb)  
  return;
  bb=Bars;  

if (
    (Hour()==checkhour) 
 && (Minute()==checkminute)
       )
// ==========================================Print(dd); 
  { 
    dd=Day();
    pp=((checkhour*60)/Period()+checkminute/Period());
    hh=High[Highest(NULL,0,MODE_HIGH,pp,1)];
    ll=Low[Lowest(NULL,0,MODE_LOW,pp,1)];
    p=((24*60)/Period());
    totalrange=0; 
    
    
    if(checkmode==1)

      {
        for(i=1;i<=days2check;i++)
        {
          daj[i]=(High[Highest(NULL,0,MODE_HIGH,p,p*i+1)]
                  -Low[Lowest(NULL,0,MODE_LOW,p,p*i+1)]);
          totalrange=totalrange+daj[i];
          avrange=MathRound((totalrange/i)/Point);
           
        }
      }
    if(checkmode==2)
      {
        for( i=1;i<=days2check;i++)
        {
          daj[i]=MathAbs(Close[p*i+pp]-
                         Close[p*(i-1)+pp]);
          totalrange=totalrange+daj[i];
          avrange=MathRound((totalrange/i)/Point);
        }
      }   
    { 
    offset=MathRound((avrange)/offsetK);  
    sellprice=ll-offset*Point;
    buyprice=hh+offset*Point;
    
   
    }
  
  
  if   (OrdersTotal()>0)
      
    {
    for(i=0;i<OrdersTotal();i++)
          {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
          if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
          

          if (OrderType()==OP_BUY)
            {
            OrderClose(OrderTicket(),1,Bid,3,White);
            break;
            }
          if (OrderType()==OP_SELL)
            {
            OrderClose(OrderTicket(),1,Ask,3,White);
            break;
            }
          }
      }
  
  }
  
  if (closemode==2 
  && Day()!=dd
  && (OrdersTotal()>0))
      
    {
    for(i=0;i<OrdersTotal();i++)
          {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
          if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
          

          if (OrderType()==OP_BUY)
            {
            OrderClose(OrderTicket(),1,Bid,3,White);
            
            break;
            }
          if (OrderType()==OP_SELL)
            {
            OrderClose(OrderTicket(),1,Ask,3,White);
            
            break;
            }
          }
      }
  
  
  for(i=0;i<OrdersTotal();i++)
          {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  break;
          if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
          

          if ((OrderType()==OP_BUY)
          && (((Close[1]-OrderOpenPrice())>=profit*Point)
          || ((OrderOpenPrice()-Close[1])>=loss*Point))) 
            {
            OrderClose(OrderTicket(),1,Bid,3,White);
            
            break;
            }
          if ((OrderType()==OP_SELL)
          && (((Close[1]-OrderOpenPrice())>=loss*Point)
          || ((OrderOpenPrice()-Close[1])>=profit*Point))) 
            {
            OrderClose(OrderTicket(),1,Ask,3,White);
            
            break;
            }
          }
          
    
  int lastopenhour=23;

  if ((Hour()<=lastopenhour)
  &&  (Day()==dd)
  &&  (Day()!=d)
  &&  (OrdersTotal()<tradesallowed))

  {
  if (Close[1]>=buyprice)
    { 
      profit=MathRound((avrange)/profitK);
      loss=MathRound((avrange)/lossK);
      OrderSend(Symbol(),OP_BUY,1,Ask,3,0,10,"",0,0,Blue);
      dd=Day();
      if (tradesallowed==1)  {d=Day();}
//      return(d);
    }
       
  if (Close[1]<=sellprice)
    {  
      profit=MathRound((avrange)/profitK);
      loss=MathRound((avrange)/lossK);
      OrderSend(Symbol(),OP_SELL,1,Bid,3,10,0,"",0,0,Red);
      dd=Day();
      if (tradesallowed==1)  {d=Day();}
    }
  return;
  } 

}



все эти эксперты рабочие проверено, работают на EURUSD H1, развлекайтесь :))

 
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); 
if(true) OpenSell();




Блеск!
 
вот эта конструкция и то больше заработает:
if(true) OpenBuy(); 
if(true) OpenSell();




Блеск!

Та не..
Вот это шедевр!:))
Ты знаешь, я тебе как программист скажу
 
"А вы поезжайте на форум метаквотесов и спросите - кто такой Паниковский!"
Причина обращения: