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

 
WitoHOH:

Поясню по внесенным изменениям:

1. Введена переменная TP. Эта переменая отвечает за размер прибыли (для тех кто не хочет закрыватся по минимуму или для спредов больше 2)

2. Изменена функция GetLots. Теперь она может работать с маленькими начальными балансами, и в тоже время не позволяет выставлять ордера более 10 лотов.

Прошу тестировать и критиковать.


1) if ((OrderProfit()>TP)) замени на if ((OrderProfit()>TP*GetLots())), чтобы ТР учитывался в зависимости от размера лота

2) Значение ТР (в вашем виде) должно быть не менее "прибыль 1 пункта при 1 лоте*GetLots()*3".

3) ТР должен быть не менее 3 пунктов. Почему 3? Потому что при закрытии позиции проходит 5-15 секунд и цена может откатиться. Меньшее значение приводит на реале к убытку.

4) И полностью согласен, что "доработанная" версия может приносить прибыль и на спреде 3, хотя и значительно меньшую.

Благодарю за желание доработать, а не просто получить эксперта и ждать от него гиперприбыль

.

 
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+ :p
 
extern int     Shift     = 3; 
extern int     Limit     = 20;
extern int     TP        = 2;
extern bool    Micro     = false; // min position size 0.1==>false 0.01==>true
extern int     OpenHour  = 19;
extern int     CloseHour = 7;
/*--------WeekEndStop--------*/
extern int     WED1      = 5;    // Day of begin (sunday)
extern int     WEH1      = 22;   // Hour of begin
extern int     WED2      = 1;    // Day of end (monday)
extern int     WEH2      = 2;    // hour of end
/*--------WeekEndStop--------*/
//----------------------------------------------------------------------------
bool           first     = true; 
double         MaxLot    = 20;
double         MinLot    = 0.1;
int            LotsDigit = 1;
//---------------------------------------------------------------------------- 
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 ((OrderProfit()>TP*GetLots()*10) || 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;
   if (Micro == true && IsTesting()== false) LotsDigit = 2;
   lots = NormalizeDouble(AccountFreeMargin()/10000,LotsDigit);
   if (LotsDigit == 2) MinLot = 0.01;
   if (lots < MinLot) lots = MinLot;
   if (lots > MaxLot) lots = MaxLot;     
   return (lots); 
   } 
//-------------------------------------------------------------------------
 
ak97052d:
 


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

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

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

 
Serg_ASV:
ponial! zavtra popitaiuc zdelat!
 
Serg_ASV:
WitoHOH:

Поясню по внесенным изменениям:

1. Введена переменная TP. Эта переменая отвечает за размер прибыли (для тех кто не хочет закрыватся по минимуму или для спредов больше 2)

2. Изменена функция GetLots. Теперь она может работать с маленькими начальными балансами, и в тоже время не позволяет выставлять ордера более 10 лотов.

Прошу тестировать и критиковать.


1) if ((OrderProfit()>TP)) замени на if ((OrderProfit()>TP*GetLots())), чтобы ТР учитывался в зависимости от размера лота

2) Значение ТР (в вашем виде) должно быть не менее "прибыль 1 пункта при 1 лоте*GetLots()*3".

3) ТР должен быть не менее 3 пунктов. Почему 3? Потому что при закрытии позиции проходит 5-15 секунд и цена может откатиться. Меньшее значение приводит на реале к убытку.

4) И полностью согласен, что "доработанная" версия может приносить прибыль и на спреде 3, хотя и значительно меньшую.

Благодарю за желание доработать, а не просто получить эксперта и ждать от него гиперприбыль

.

Спасиб за критику.

Но к сожалению не могу согласится с выражением if ((OrderProfit()>TP*GetLots())) .

Давайте рассуждать реално: данный советник срывает минимальную прибыль и не ждет кгда она зашкалит за определенные пределы.

Не факт что она поднимается до уровня TP*GetLots().

К тоуже в определеный момент такая фомула перестнет вообще заккрывать позици.

Когда GetLots() достигнет определнных рзмеров, зависящих от Вашего дипозита.

 
WitoHOH:
Serg_ASV:
WitoHOH:

Поясню по внесенным изменениям:

1. Введена переменная TP. Эта переменая отвечает за размер прибыли (для тех кто не хочет закрыватся по минимуму или для спредов больше 2)

2. Изменена функция GetLots. Теперь она может работать с маленькими начальными балансами, и в тоже время не позволяет выставлять ордера более 10 лотов.

Прошу тестировать и критиковать.


1) if ((OrderProfit()>TP)) замени на if ((OrderProfit()>TP*GetLots())), чтобы ТР учитывался в зависимости от размера лота

2) Значение ТР (в вашем виде) должно быть не менее "прибыль 1 пункта при 1 лоте*GetLots()*3".

3) ТР должен быть не менее 3 пунктов. Почему 3? Потому что при закрытии позиции проходит 5-15 секунд и цена может откатиться. Меньшее значение приводит на реале к убытку.

4) И полностью согласен, что "доработанная" версия может приносить прибыль и на спреде 3, хотя и значительно меньшую.

Благодарю за желание доработать, а не просто получить эксперта и ждать от него гиперприбыль

.

Спасиб за критику.

Но к сожалению не могу согласится с выражением if ((OrderProfit()>TP*GetLots())) .

Давайте рассуждать реално: данный советник срывает минимальную прибыль и не ждет кгда она зашкалит за определенные пределы.

Не факт что она поднимается до уровня TP*GetLots().

К тоуже в определеный момент такая фомула перестнет вообще заккрывать позици.

Когда GetLots() достигнет определнных рзмеров, зависящих от Вашего дипозита.


А если мы не вставим GetLots(), то сделка будет закрываться при прибыли 2 доллара не зависимо от размера лота.

Тогда вопрос - зачем менять 0 на 2. Если установить TP на уровне 4, то при лоте 0.1 позиция будет закрываться при прибыли 2 пункта (EUR/GBP). А при повышении размера лота по функции GetLots() свыше 0.2 - позиция будет закрываться при прибыли 1 пункт, что равняется (OrderProfit()>0). Поэтому при прогрессировании размера лота должен прогрессировать и уровень прибыли, при котором закрывается позиция.

 
Serg_ASV:
WitoHOH:
Serg_ASV:
WitoHOH:

Поясню по внесенным изменениям:

1. Введена переменная TP. Эта переменая отвечает за размер прибыли (для тех кто не хочет закрыватся по минимуму или для спредов больше 2)

2. Изменена функция GetLots. Теперь она может работать с маленькими начальными балансами, и в тоже время не позволяет выставлять ордера более 10 лотов.

Прошу тестировать и критиковать.


1) if ((OrderProfit()>TP)) замени на if ((OrderProfit()>TP*GetLots())), чтобы ТР учитывался в зависимости от размера лота

2) Значение ТР (в вашем виде) должно быть не менее "прибыль 1 пункта при 1 лоте*GetLots()*3".

3) ТР должен быть не менее 3 пунктов. Почему 3? Потому что при закрытии позиции проходит 5-15 секунд и цена может откатиться. Меньшее значение приводит на реале к убытку.

4) И полностью согласен, что "доработанная" версия может приносить прибыль и на спреде 3, хотя и значительно меньшую.

Благодарю за желание доработать, а не просто получить эксперта и ждать от него гиперприбыль

.

Спасиб за критику.

Но к сожалению не могу согласится с выражением if ((OrderProfit()>TP*GetLots())) .

Давайте рассуждать реално: данный советник срывает минимальную прибыль и не ждет кгда она зашкалит за определенные пределы.

Не факт что она поднимается до уровня TP*GetLots().

К тоуже в определеный момент такая фомула перестнет вообще заккрывать позици.

Когда GetLots() достигнет определнных рзмеров, зависящих от Вашего дипозита.


А если мы не вставим GetLots(), то сделка будет закрываться при прибыли 2 доллара не зависимо от размера лота.

Тогда вопрос - зачем менять 0 на 2. Если установить TP на уровне 4, то при лоте 0.1 позиция будет закрываться при прибыли 2 пункта (EUR/GBP). А при повышении размера лота по функции GetLots() свыше 0.2 - позиция будет закрываться при прибыли 1 пункт, что равняется (OrderProfit()>0). Поэтому при прогрессировании размера лота должен прогрессировать и уровень прибыли, при котором закрывается позиция.


Прошу прощения!

Поторопился прокоментировать до конца не въехав в тему!

Все правильно.

Полностью согласен!

 
Господа, тестить по всем тикам, я правильно понимаю?  И нужна ли оптимизация?
 

К сожалению, я только изучаю этот язык, и не совсем понимаю, как читать код.

В параметрах оптимизации появились несколько строк, очень прошу ответить что они означают, и требуют ли они оптимизации и в каких интервалах, и вообще, на какой паре лучше торговать и на каком таймфрейме???

Вот эти строки-

1. Micro-false

2.Open Hour

3.Close Hour

4.WED1

5.WEH1

6.WED2

7.WEH2

Большая просьба пояснить что можно и нужно делать с этими параметрами, на какой паре и на каком таймфрейме???

Очень жду ответа, от автора этого кода, или кто в этом больше понимает, чем я, СПАСИБО.

 

Тест с 1 июля этого года, депо-1000 долларов, все тики, Н1, без оптимизации, что-то денег маловато, у кого какие результаты и с какими параметрами?