Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1092

 
Переустановка ОС. Как восстановить после переустановки ОС МТ4 в том состоянии, в котором он был до переустановки.
Индикаторы, советники, скрипты; шаблоны, профили; счета
 
AlexandrL:
Переустановка ОС. Как восстановить после переустановки ОС МТ4 в том состоянии, в котором он был до переустановки.
Индикаторы, советники, скрипты; шаблоны, профили; счета
Перед переустановкой скопировать папку терминала на флэшку. Если семерка и выше - то и общую папку. Подробности тут
 

Добрый день.

Советник по стрелочному индикатору.

По верхнему фракталу продать, по нижнему купить. В работе макс. 1 ордер. Но где то ошибка, т.к. советник не учитывает фракталы и открывается только в бай. Или не открывается совсем (если изменить сдвиг в iCustom). В советник пробовал вставлять другое условие (на пересечении машки). Все работает, а данные со стрелочного индикатора не берет.  

индикатор:

 

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Yellow
#property indicator_width1 2
#property indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


 

Код из совы:

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

 

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

Файлы:
 

Добрый день.

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

 Спасибо.

 

Здравствуйте, буду благодарен, если кто подскажет что сюда вписать, чтобы советник прекращал открывать отложенники после срабатывания. 

//+------------------------------------------------------------------+
//|                              Copyright © 2014, Khlystov Vladimir |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property strict
#property description "Советник торгует на скачках рынка, при этом не использует никакие индикаторы."
#property description "Идея советника заключается в том, что стоп ордера дискретно времени перемещаются на заданном расстоянии от текущей цены."
#property description "Если цена достаточно резко поползла в одну сторону, то советник просто не успевает переместить ордер и он становится рыночным."
#property description "Далее включается тралл ордера."
 //--------------------------------------------------------------------
extern int     Stoploss             = 10,     //стоплосс, если 0 то не изменяется
               Takeprofit           = 50;     //тейкпрофит, если 0 то не изменяется
extern int     TrailingStop         = 10;     //длинна тралла, если 0 то нет тралла
extern int     TrailingStart        = 0;      //когда включать тралл, например после достижения 40 п прибыл
extern int     StepTrall            = 2;      //шаг тралла - перемещать стоплосс не ближе чем StepTrall
extern int     NoLoss               = 0,      //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток
               MinProfitNoLoss      = 0;      //минимальная прибыль при переводе вбезубыток
extern int     Magic                = 77;     //магик
extern int     Step                 = 10;     //расстояние от цены
extern double  Lot                  = 0.1;
extern int     TimeModify           = 30;     //кол-во секунд раньше которого запрещено изменять ордер
extern int     slippage             = 30;     //Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
//--------------------------------------------------------------------
datetime  TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int start()                                  
{
   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
   int b=0,s=0,TicketB=0,TicketS=0,OT;
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
         { 
            OT = OrderType(); 
            OSL = NormalizeDouble(OrderStopLoss(),Digits);
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            SL=OSL;
            if (OT==OP_BUY)             
            {  
               b++;
               if (OSL<OOP && NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits); 
                  if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
               }
               
               if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
               {
                  StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits); 
                  if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
               }
               
               if (SL > OSL)
               {  
                  if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Buy   SL ",OSL,"->",SL);
                  else Print("Order Buy Modify   SL ",OSL,"->",SL);
               }
            }                                         
            if (OT==OP_SELL)        
            {
               s++;
               if ((OSL>OOP || OSL==0) && NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits); 
                  if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
               }
               
               if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
               {
                  StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits); 
                  if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
               }
               
               if ((SL < OSL || OSL==0) && SL!=0)
               {  
                  if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Sell   SL ",OSL,"->",SL);
                  else Print("Order Sell Modify   SL ",OSL,"->",SL);
               }
            } 
            if (OT==OP_BUYSTOP)  {PriceB=OOP; TicketB=OrderTicket();}     
            if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}  
         }
      }
   }
   if (b+TicketB==0)
   {
      if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
   } 
   if (s+TicketS==0)
   {
      if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
   } 
   if (TicketB!=0)
   {
      if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
      {
         if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
         if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
         if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
      }
   } 
   if (TicketS!=0)
   {
      if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
      {
         if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
         if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
         if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
      }
   } 
return(0);
}
//--------------------------------------------------------------------

Файлы:
 
yaaarik777:

Добрый день.

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

 Спасибо.

            if (DayOfWeek() == 1) Price = iOpen(Symbol(), PERIOD_D1, 4);
            if (DayOfWeek() >= 2) Price = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

Похоже на глюки MetaTrader: кто-нибудь сталкивался с зависанием при попытке входа в процедуру?

Вот такой простой код

void OnInit()

{

...

Print("Outside procedure");

StartBuy(Price, Take, Stop, Lot); 

... 

void StartBuy(double Price, double Take, double Stop, double Lot)

{

Print("Inside procedure");

.... 

}

выдает одну строку Outside procedure и далее тестер зависает. Что это?

 
A13ksandr:

Похоже на глюки MetaTrader: кто-нибудь сталкивался с зависанием при попытке входа в процедуру?

Вот такой простой код

void OnInit()

{

...

Print("Outside procedure");

StartBuy(Price, Take, Stop, Lot); 

... 

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

 
Scarick1:

Здравствуйте, буду благодарен, если кто подскажет что сюда вписать, чтобы советник прекращал открывать отложенники после срабатывания. 

//+------------------------------------------------------------------+
//|                              Copyright © 2014, Khlystov Vladimir |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property strict
#property description "Советник торгует на скачках рынка, при этом не использует никакие индикаторы."
#property description "Идея советника заключается в том, что стоп ордера дискретно времени перемещаются на заданном расстоянии от текущей цены."
#property description "Если цена достаточно резко поползла в одну сторону, то советник просто не успевает переместить ордер и он становится рыночным."
#property description "Далее включается тралл ордера."
 //--------------------------------------------------------------------
extern int     Stoploss             = 10,     //стоплосс, если 0 то не изменяется
               Takeprofit           = 50;     //тейкпрофит, если 0 то не изменяется
extern int     TrailingStop         = 10;     //длинна тралла, если 0 то нет тралла
extern int     TrailingStart        = 0;      //когда включать тралл, например после достижения 40 п прибыл
extern int     StepTrall            = 2;      //шаг тралла - перемещать стоплосс не ближе чем StepTrall
extern int     NoLoss               = 0,      //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток
               MinProfitNoLoss      = 0;      //минимальная прибыль при переводе вбезубыток
extern int     Magic                = 77;     //магик
extern int     Step                 = 10;     //расстояние от цены
extern double  Lot                  = 0.1;
extern int     TimeModify           = 30;     //кол-во секунд раньше которого запрещено изменять ордер
extern int     slippage             = 30;     //Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).
//--------------------------------------------------------------------

datetime  TimeBarB,TimeBarS;

bool TradingAllowed = true; 

//--------------------------------------------------------------------
int start()                                  
{
   double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
   int b=0,s=0,TicketB=0,TicketS=0,OT;
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
         { 
            OT = OrderType(); 
            OSL = NormalizeDouble(OrderStopLoss(),Digits);
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            SL=OSL;
            if (OT==OP_BUY)             

            {   

               b++;

TradingAllowed = false; 

               if (OSL<OOP && NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits); 
                  if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
               }
               
               if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
               {
                  StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits); 
                  if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
               }
               
               if (SL > OSL)
               {  
                  if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Buy   SL ",OSL,"->",SL);
                  else Print("Order Buy Modify   SL ",OSL,"->",SL);
               }
            }                                         
            if (OT==OP_SELL)        
            {

               s++;

TradingAllowed = false; 

               if ((OSL>OOP || OSL==0) && NoLoss!=0)
               {
                  StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits); 
                  if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
               }
               
               if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
               {
                  StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits); 
                  if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
               }
               
               if ((SL < OSL || OSL==0) && SL!=0)
               {  
                  if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Sell   SL ",OSL,"->",SL);
                  else Print("Order Sell Modify   SL ",OSL,"->",SL);
               }
            } 
            if (OT==OP_BUYSTOP)  {PriceB=OOP; TicketB=OrderTicket();}     
            if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}  
         }
      }

   }

if (b == 0 && s == 0) TradingAllowed = true; 

   if (b+TicketB==0 && TradingAllowed)
   {
      if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
   } 
   if (s+TicketS==0 && TradingAllowed)
   {
      if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
      if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
      if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP,"news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
   } 
   if (TicketB!=0)
   {
      if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
      {
         if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
         if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
         if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
      }
   } 
   if (TicketS!=0)
   {
      if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
      {
         if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
         if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
         if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
      }
   } 
return(0);
}
//--------------------------------------------------------------------

Как-нибудь так... 


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

Сорри! Конечно всё в void OnTick() происходит. Описался)
Причина обращения: