Советники: Lucky - страница 6

 
ak97052d:
hitmax:
Подскажите кто-нибудь, как поменять лот на 0.01. И что за GetLots?

return (NormalizeDouble(AccountFreeMargin()/10000,/*1*/2));
Заменить приведенную строчку на return(0.1); или любое другое допустимое значение. GetLots рассчитывает размер лота.
 
Yuriy:
ak97052d:
hitmax:
Подскажите кто-нибудь, как поменять лот на 0.01. И что за GetLots?

return (NormalizeDouble(AccountFreeMargin()/10000,/*1*/2));
Заменить приведенную строчку на return(0.1); или любое другое допустимое значение. GetLots рассчитывает размер лота.


double GetLots() 
 { 
  double lots;
  lots = NormalizeDouble(AccountFreeMargin()/10000,1);
  if (lots < 0.01) {lots = 0.01;};
  if (lots > 10) {lots = 10;};
 return (lots); 
 }

Думаю будет лучше такая конструкция.

Если депозит маленький, то lots будет 0.01, с росом депозита, будет увеличиватся и lots, но не более 10 лотов.

Параметры можно выставить самостоятельно!

:)

 
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
 
double a, b; 
bool first=true; 
extern int Shift = 2; 
extern int Limit = 300;
extern int TP = 0;
extern int max = 20;
 
//---------------------------------------------------------------------------- 
int start()
{ 
  if (first) 
   {
      a=Ask; 
      b=Bid; 
      first=false; 
      return(0);
   } 
  if (OrdersTotal() < max) {Comment("Осталось ",(max-OrdersTotal())," ордеров");
  if (Ask-a>=Shift*Point) 
    {
    OrderSend(Symbol(),OP_SELL,GetLots(),Bid,3,0,0,"Lucky",0,0,CLR_NONE);
    } 
  if (b-Bid>=Shift*Point) 
    {
    OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,0,0,"Lucky",0,0,CLR_NONE);
    } 
   } else {Comment("Достигнут максимум ",max," ордеров"); }
  a=Ask;  
  b=Bid; 
  
  CloseAll(); 
return(0);} 
//----------------------------------------------------------------------------- 
void CloseAll() 
{ 
  for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
    if (OrderSymbol() == Symbol()) 
    { 
      if ((OrderProfit()>TP*GetLots()*10)) 
      { 
        if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
        if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
      } 
      else 
      { 
        if((OrderType()==OP_BUY)  && (((OrderOpenPrice()-Ask)/Point) > Limit)) 
          OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
        if((OrderType()==OP_SELL) && (((Bid-OrderOpenPrice())/Point) > Limit)) 
          OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
      } 
    } 
  } 
} 
 
 
 
//-------------------------------------------------------------------------- 
 
 
 
double GetLots() 
{ 
double lots;
lots = NormalizeDouble(AccountFreeMargin()/10000,1);
if (lots < 0.1) {lots = 0.1;};
if (lots > 20) {lots = 20;};
return (lots); 
 
  
} 
//-------------------------------------------------------------------------
Предлагаю еще один вариант данного советника. Введено ограничение на количество открытых ордеров.
 
WitoHOH:
double GetLots() 
 { 
  double lots;
  lots = NormalizeDouble(AccountFreeMargin()/10000,1);
  if (lots < 0.01) {lots = 0.01;};
  if (lots > 10) {lots = 10;};
 return (lots); 
 }

Думаю будет лучше такая конструкция.

Если депозит маленький, то lots будет 0.01, с росом депозита, будет увеличиватся и lots, но не более 10 лотов.

Параметры можно выставить самостоятельно!

:)

Privet vcem!


tut chtoto ne to!
  if (lots < 0.01) {lots = 0.01;};
  if (lots > 10) {lots = 10;};
naverna ti xotel napicat
  if (lots < 0.01) {lots = 0.01;}
  if (lots > 10) {lots = 10;}

c tokim covetnikom u tibia nekagda ne polutchitsa otkrit micro pozitciu! (tipa 0. 02 ili 0.07)
dlia etovo nada postavit 2 na mecta 1 vot tut:
lots = NormalizeDouble(AccountFreeMargin()/10000,2);

a vot gde vi mojite naiti informatciu na chiot etovo vcevo:
https://docs.mql4.com/ru/convert/normalizedouble
double NormalizeDouble( double value, int digits) // ecli digits=1 minimalnaia ctavka budit 0.1 i dalche budit 0.2 ; 0.3 ; 0.4 ....
// ecli digits=2 minimalnaia ctavka budit 0.01 a dalche 0.02 ; 0.03 ; 0.04 ....
vot kak ia napical !
extern bool Micro = false; // ecli 'true' minimalnii lot budit '0.01', ecli 'false' tagda budit '0.1'. 
double MaxLot     = 20, 
       MinLot     = 0.1;   // ne izminiat daje ecli 'Micro = true'.  *
int LotsDigit     = 1;     // ne izminiat daje ecli 'Micro = true'.  *
 
int start()
   {
   [...]
   }
double GetLots() 
   { 
   double lots;
   if (Micro == true && IsTesting()== false) LotsDigit = 2; // v testere minimum vcegda budit '0.1', a ecli ne v testere i 'Micro == true' tagda minimum budit '0.01'
   lots = NormalizeDouble(AccountFreeMargin()/10000,LotsDigit); 
   if (LotsDigit == 2) MinLot = 0.01; // ecli 'LotsDigit == 2' tagda i 'MinLot' sam pereklutchaetca na '0.01'  *
   if (lots < MinLot) lots = MinLot;  
   if (lots > MaxLot) lots = MaxLot;     
   return (lots); 
   }
 
ak97052d:
WitoHOH:
double GetLots() 
 { 
  double lots;
  lots = NormalizeDouble(AccountFreeMargin()/10000,1);
  if (lots < 0.01) {lots = 0.01;};
  if (lots > 10) {lots = 10;};
 return (lots); 
 }

Думаю будет лучше такая конструкция.

Если депозит маленький, то lots будет 0.01, с росом депозита, будет увеличиватся и lots, но не более 10 лотов.

Параметры можно выставить самостоятельно!

:)

Privet vcem!


tut chtoto ne to!
  if (lots < 0.01) {lots = 0.01;};
  if (lots > 10) {lots = 10;};
naverna ti xotel napicat
  if (lots < 0.01) {lots = 0.01;}
  if (lots > 10) {lots = 10;}

c tokim covetnikom u tibia nekagda ne polutchitsa otkrit micro pozitciu! (tipa 0. 02 ili 0.07)
dlia etovo nada postavit 2 na mecta 1 vot tut:
lots = NormalizeDouble(AccountFreeMargin()/10000,2);

a vot gde vi mojite naiti informatciu na chiot etovo vcevo:
https://docs.mql4.com/ru/convert/normalizedouble
double NormalizeDouble( double value, int digits) // ecli digits=1 minimalnaia ctavka budit 0.1 i dalche budit 0.2 ; 0.3 ; 0.4 ....
// ecli digits=2 minimalnaia ctavka budit 0.01 a dalche 0.02 ; 0.03 ; 0.04 ....
vot kak ia napical !
extern bool Micro = false; // ecli 'true' minimalnii lot budit '0.01', ecli 'false' tagda budit '0.1'. 
double MaxLot     = 20, 
       MinLot     = 0.1;   // ne izminiat daje ecli 'Micro = true'.  *
int LotsDigit     = 1;     // ne izminiat daje ecli 'Micro = true'.  *
 
int start()
   {
   [...]
   }
double GetLots() 
   { 
   double lots;
   if (Micro == true && IsTesting()== false) LotsDigit = 2; // v testere minimum vcegda budit '0.1', a ecli ne v testere i 'Micro == true' tagda minimum budit '0.01'
   lots = NormalizeDouble(AccountFreeMargin()/10000,LotsDigit); 
   if (LotsDigit == 2) MinLot = 0.01; // ecli 'LotsDigit == 2' tagda i 'MinLot' sam pereklutchaetca na '0.01'  *
   if (lots < MinLot) lots = MinLot;  
   if (lots > MaxLot) lots = MaxLot;     
   return (lots); 
   }

Привет!

Спасибо за подсказку!

Я только начал изучать MQL, поэтому не все моменты знаю.

По этому поводу уже думал, но как-то руки проверить не дошли.

Еще раз спасибо.

 
WitoHOH:

Привет!
Спасибо за подсказку!
Я только начал изучать MQL, поэтому не все моменты знаю.
По этому поводу уже думал, но как-то руки проверить не дошли.
Еще раз спасибо.

ia toje ne davno natchel
i rad co cvoimi znaniami podilitsa i za obdo komuto pomotch!
;)
 
Serg_ASV:


Похвально, но еще раз предупреждаю - для реала ТР=2 слишком мало. В твоем случае - при лоте 0,1 - закрытие позиции при прибыли 2.04, т.е. при первом положительном тике.

Фактически это идентично ">0".

И коэффициент 10? Ведь стоимость 1 пункта по EUR/GBP - 20,4. Честно говоря я использую ТР*GetLots(), при ТР = 60-80-100

И действительно - лучше результат на EUR/GBP. ;)

nada cnatchala dobavit eto v konetc covetnika:
double SecurProfit() // 
   {
   double TV,SP;
   TV = NormalizeDouble(MarketInfo(Symbol(), MODE_TICKVALUE), 4); // pribl za 1 pip c 1 lot
   SP = TV*lots*2; // pribil za 2 pips c vlajinim razmerom (lots) 
   }

a potom procto dabavit etu funkciu v covetnik tam gde funkciia zakritie!
         if (OrderProfit()>SP || Tradetime() == 0) 
            { 
            if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
            if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
            }
chtobe protestirovat v E/G nujno abezatelna imet danie alpari E/G i E/U (tickvalue chitaetsa po ctoimocti E/U i E/G).

:p
 
ak97052d:
Serg_ASV:


Похвально, но еще раз предупреждаю - для реала ТР=2 слишком мало. В твоем случае - при лоте 0,1 - закрытие позиции при прибыли 2.04, т.е. при первом положительном тике.

Фактически это идентично ">0".

И коэффициент 10? Ведь стоимость 1 пункта по EUR/GBP - 20,4. Честно говоря я использую ТР*GetLots(), при ТР = 60-80-100

И действительно - лучше результат на EUR/GBP. ;)

nada cnatchala dobavit eto v konetc covetnika:
double SecurProfit() // 
   {
   double TV,SP;
   TV = NormalizeDouble(MarketInfo(Symbol(), MODE_TICKVALUE), 4); // pribl za 1 pip c 1 lot
   SP = TV*lots*2; // pribil za 2 pips c vlajinim razmerom (lots) 
   }

a potom procto dabavit etu funkciu v covetnik tam gde funkciia zakritie!
         if (OrderProfit()>SP || Tradetime() == 0) 
            { 
            if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
            if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
            }
chtobe protestirovat v E/G nujno abezatelna imet danie alpari E/G i E/U (tickvalue chitaetsa po ctoimocti E/U i E/G).

:p


Пытался вставить этот кусок кода, но программа выдает 2 ошибки, надо исправить или помочь мне их найти.

Спасибо.

 
alexluzan писал(а):

Пытался вставить этот кусок кода, но программа выдает 2 ошибки, надо исправить или помочь мне их найти.
Спасибо.

Privet
izviniaiuc eto moia ochibka!

vot rezultat izpravlenoi vercia etovo covetnika (EURGBPm1):
16/06/2004 ==> 07/09/2007
1000 $ ==> 11 072 260.81 $




a vot i covetnik:
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+ :p
 
extern bool    MM        = true; // razmer lota avtomatitchecki chtitaetca
extern int     Risk      = 100;    // v procentax (%). minimum '1' maximum '100' 
extern double  ManLot    = 0.1;   // razmer lota ecli 'MM=false'
extern int     Shift     = 3; 
extern int     Limit     = 18;
extern int     TP        = 2;
/*--------TradingTime--------*/
int            OpenHour  = 19;
int            CloseHour = 7;
/*--------WeekEndStop--------*/
int            WED1      = 5;    // Day of begin (sunday)
int            WEH1      = 22;   // Hour of begin
int            WED2      = 1;    // Day of end (monday)
int            WEH2      = 2;    // hour of end
//----------------------------------------------------------------------------
bool           first     = true; 
double         MaxLot    = 100;
double         MinLot    = 0.1;
int            LotsDigit = 1;
double TV,SP;
//---------------------------------------------------------------------------- 
int TradingTime,WE; double a, b; 
 
int start()
   { 
   if (WEstop() == 0 && Tradetime() == 1)
      {
      if (first) 
         {
         a=Ask; 
         b=Bid; 
         first=false; 
         return(0);
         }
       
      if (Ask-a>=Shift*Point) 
         {
         OrderSend(Symbol(),OP_SELL,GetLots(),Bid,3,0,0,"Lucky",0,0,CLR_NONE);
         }  
      if (b-Bid>=Shift*Point) 
         {
         OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,0,0,"Lucky",0,0,CLR_NONE);
         } 
      }
   a=Ask;  
   b=Bid; 
  
   CloseAll(); 
   return(0);
   } 
//----------------------------------------------------------------------------- 
void CloseAll() 
   { 
   for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
      { 
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
      if (OrderSymbol() == Symbol()) 
         { 
         if (SecurProfit()==1 || Tradetime() == 0)
            { 
            if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
            if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
            } 
         else 
            { 
            if((OrderType()==OP_BUY)  && (((OrderOpenPrice()-Ask)/Point) > Limit)) 
            OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); 
            if((OrderType()==OP_SELL) && (((Bid-OrderOpenPrice())/Point) > Limit)) 
            OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); 
            } 
         } 
      } 
   } 
//--------------------------------------------------------------------------
int WEstop()
   {
   WE=0;
   if (TimeHour(TimeCurrent()) > WEH1 && DayOfWeek() == WED1) WE=1;
   if (TimeHour(TimeCurrent()) < WEH2 && DayOfWeek() == WED2) WE=2;
   return(WE);
   }
//-------------------------------------------------------------------------- 
int Tradetime()
   {
   TradingTime=0;
   if (TimeHour(TimeCurrent()) >= OpenHour || TimeHour(TimeCurrent())< CloseHour)   TradingTime=1;
   return(TradingTime); 
   }
//-------------------------------------------------------------------------- 
double GetLots() 
   {
   double lots,MD,RM,FMM,MinLot,MaxLot; int lotsdigit;
   MD = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // chag mejdu lotami (0.1 ili 0.01)pomojit nam uznat ecli eto micro accunt ili net
   RM = NormalizeDouble(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 4);
   FMM = (RM+5)*100;
   if (MD==0.01) lotsdigit=2;
   else lotsdigit=1;
   LotsDigit=lotsdigit;
   if (MM==true) lots = NormalizeDouble(AccountFreeMargin()/(FMM/Risk)-0.05,LotsDigit);
   else lots=ManLot;
   MinLot=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);    // minimalnaia pozvolena stavka
   MaxLot=NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT),2);   // maximalnaia pozvolena stavka
   if (LotsDigit == 2) MinLot = 0.01; 
   if (lots < MinLot) lots = MinLot;  
   if (lots > MaxLot) lots = MaxLot;     
   return (lots);      
   }
//-------------------------------------------------------------------------
double TickValue() // 
   {
   double tv;
   tv = NormalizeDouble(MarketInfo(Symbol(), MODE_TICKVALUE), 4); // pribl za 1 pip c 1 lot
   return(tv);
   }
int SecurProfit()
   {
   int sp=0;
   if (OrderProfit()>(TickValue()*GetLots()*TP)) sp=1; // ecli pribilnix ticksov viche 'TP'. rezultat 'SecurProfit()' budit '1'
   return(sp);
   }
:p
 
Подскажите где самая последняя версия для еврофунта на 1 минутку???

у меня версия 1.1 какая то вроде неплохо но сильная просадка летом.

напишите сюда плиз
stace2003@hot.ee
Причина обращения: