[ARCHIVE] Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Nowhere without you - 3. - page 94

 

Greetings all!

Please help with this problem: I can't get the indicator to redraw with the appearance of a new bar (D interval). П

//+------------------------------------------------------------------+
//|                                                 Demark Lines.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2       // Количество буферов
#property indicator_color1 Green     // Цвет первой линии
#property indicator_color2 Red      // Цвет второй линии

double Buf_UP[],Buf_DN[];             // Объявление массивов (под буферы индикатора)

extern int History=21;        // Колич.баров в расчётной истории
extern int M= 3;           // начальный бар с которого начинаем поиск фракталов в цикле.
int    i,k;                // номера баров в циклах.
int    Vnf3,Vnf2,Vnf1;     // номера реперных фракталов (1-ый справа на графике на нисходящем тренде).
int    VnfL3,VnfL2,VnfL1;  // номера реперных фракталов (1-ый справа на графике на восходящем тренде).
int    VFN,VFNL;           // счетчик найденных фракталов.
int    Md,MdL;             // счетчики кол-ва модификаций
int counted_bars;
double VMF1,VMF2;     // промежуточные значения верхних фракталов на нисходящем тренде.
double VMFL1,VMFL2;  // промежуточные значения нижних фракталов на восходящем тренде.
double VlFl_L;             // Min значение ближайшего нижнего фрактала на тренде вниз
double VlFl_H;             // Max значение ближайшего верхнего фрактала на тренде вверх
datetime tim1_L;           // Время ближайшего нижнего фрактала после нисходящего тренда 
datetime timL1_H;          // Время ближайшего верхнего фрактала после восходящего тренда 

datetime tim1,tim2,tim3;   // время для построения линий вилки Чувашова.
datetime timL1,timL2,timL3;// время для построения линий вилки Чувашова.

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,Buf_UP);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);// Стиль линии
   SetIndexBuffer(1,Buf_DN);         // Назначение массива буферу
   SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1);// Стиль линии
   
   counted_bars=IndicatorCounted();
   return;                          // Выход из спец. ф-ии init()

  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  int limit=counted_bars;
  counted_bars=IndicatorCounted();
   if (counted_bars!=limit)
      {int Razmer=ArraySize(Buf_DN);
       for (i=Razmer;i>=0;i--)
         {Buf_DN[i]=0;
         }
         Razmer=ArraySize(Buf_UP);
         for (i=Razmer;i>=0;i--)
         {Buf_UP[i]=0;
         }
       }  
//----
   for (i=2;i<=History;i++)
    {//цикл
    if(High[i]>High[i+1] &&High[i]>High[i-1]&&High[i]>Close[i-2])
     {//фрактал
      VFN++;           // счетчик найденного фрактала.
      // ------------------------------------------------------------+
      if(VFN==1)       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        {// f1
           Vnf1=i;        // запоминаем номер Max бара найденного фрактала.
           VMF1=High[i];  // запоминаем Max значение 1-ого найденного фрактала.
           tim1=iTime(NULL,0,i);        // запоминаем время 1-ой опорной точки.
         }//-f1
    // --------------------------------------------------------------+
    if(VFN==2)        // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      {// f2
          VMF2=High[i];    // запоминаем Max значение 2-ого найденного фрактала.
          if(VMF2>VMF1)    // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              Vnf2=i;      // запоминаем номер Max бара найденного фрактала.
              tim2=iTime(NULL,0,i);      // запомним время 2-ой опорной точки.
            }
            else VFN=VFN-1;
       }//-f2
    // --------------------------------------------------------------+
   
    

// ------------------------------------------------------------------+
   if(VFN==2) break; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    }//-фрактал                      
   }//-цикл 
//----
 //int k=0;
   
  
  


for (i=2;i<=History;i++)
    {//цикл
    if(Low[i]<Low[i+1] &&Low[i]<Low[i-1]&&Low[i]<Close[i-2])
     {//фрактал
      VFNL++;           // счетчик найденного фрактала.
      // ------------------------------------------------------------+
      if(VFNL==1)       // если 1-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
        {// f1
           VnfL1=i;        // запоминаем номер Max бара найденного фрактала.
           VMFL1=Low[i];  // запоминаем Max значение 1-ого найденного фрактала.
           
           timL1=iTime(NULL,0,i);        // запоминаем время 1-ой опорной точки.
         }//-f1
    // --------------------------------------------------------------+
    if(VFNL==2)        // если 2-ый фрактал найден, запоминаем значения: Max[i], № свечи[i], время[i]:
      {// f2
          VMFL2=Low[i];    // запоминаем Max значение 2-ого найденного фрактала.
          if(VMFL2<VMFL1)    // если Max значение 2-го фрактала больше 1-го (т.е. направлена вниз),
            {
              VnfL2=i;      // запоминаем номер Max бара найденного фрактала.
              timL2=iTime(NULL,0,i);      // запомним время 2-ой опорной точки.
            }
            else VFNL=VFNL-1;
       }//-f2
    // --------------------------------------------------------------+

// ------------------------------------------------------------------+
   if(VFN==2) break; // найдены все 2 фрактала, выходим из цикла.
// ------------------------------------------------------------------+ 
    }//-фрактал                      
   }//-цикл 

 //_________________________________Отрисовка индикатора_________________________________________________
  
  if (Vnf1<VnfL1&&Vnf2!=0)               // если ближайший фрактал - вверх
 
  {int k=Vnf2;
   for (i=Vnf2;i>=0;i--)
    {
     Buf_DN[i]= EquationDirect(Vnf2, VMF2, Vnf1,VMF1,k);
     k--;
    }}
   if (VnfL1<Vnf1&&VnfL2!=0)       //если ближайший фрактал - вниз
 
 {k=VnfL2;
   for (i=VnfL2;i>=0;i--)
    {
     Buf_UP[i]= EquationDirect(VnfL2, VMFL2, VnfL1,VMFL1,k);
     k--;
    }}
 //_____________________________________________________________________________________________________
    

   return(0);
  }
//+------------------------------------------------------------------+


  
   double EquationDirect(double x1, double y1, double x2, double y2, double x) //прямая линия
   {
if (x2==x1) return(y1);
return((y2-y1)/(x2-x1)*(x-x1)+y1);}

I have to restart it manually.

 
phh200400:
is it possible to download the zolliot wave indicator

Of course you can. You need to find and download
 
A google search string:
zlliot wave indicator site:mql4.com
 

Thanks, splxgf !!!!!!!!!!!!!!!

Specifically, here if ( OrderType( )==OP_BUY && OrderType( )==OP_SELL )

Well of course the order can be both buy and sell, but I would put ||

LOL!!! Yes, I did... For real...

if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point)


I recommend to clarify who is point and why is it multiplied by 0.5? It's just that the variant without normalize doublet is not so reliable if you compare it to zero. Here it works.

Ticket is an integer type, OrderClose is boolean... better not to do it that way.

while loop is infinite and only market orders are deleted, if there is one pending, this music will be eternal. Thanks!!! !!!!


 

Guys, tell me the difference ?????

if(OrderSymbol()!=Symbol())continue;

и

if(OrderSymbol()==Symbol())

???????????

 

Yeah, I don't know... Well, continue;should send to the previous loop, and it can probably go through until it matches, depending on how it's written.

Help !!!!!!! (my post on the previous page)!

 
//+------------------------------------------------------------------+
//|             AsctrendBuySellExpert_v1.mq4  code by Newdigital     |
//|                                     https://www.forex-tsd.com     |
//|                using Gordago software http://www.gordago.com     |
//| - Asctrend code for this EA was taken from                       |
//|   AscTrend_NonLag EA coded by of Igorad.                         |
//| - "Non-Trading Hours" on the screen fixing code by Locutus       |
//|   from Updated DayTradingMM EA                                   |
//+------------------------------------------------------------------+
#property copyright "newdigital"
#property link      "https://www.forex-tsd.com"

#include <stderror.mqh> // библиотека ошибок
#include <stdlib.mqh>
extern int MAGIC  = 100111;

extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "AsctrendBuySellExpert";
extern bool UseSound = False;
extern string NameFileSound = "alert.wav";

extern string PARAMETERS_FILTER = "PARAMETERS FILTER";
extern bool UseHourTrade = False;
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;


extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 1000;
extern double sStopLoss = 1000;
extern double lTakeProfit = 1000;
extern double sTakeProfit = 1000;
extern double lTrailingStop = 1000;
extern double sTrailingStop = 1000;

extern string PARAMETERS_INDICATOR_ONE  = "ASCTrend";
extern bool    UseASCtrend    = True;
extern int     RISK           = 3;
int asctrend,asctrend1;
int ASCtrend,ASCtrend1;



void deinit() {
   Comment("");
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int start(){
   if (UseHourTrade){
   if((Hour()>=FromHourTrade)&&(Hour()<=ToHourTrade))
      Comment("Trading Hours");
   else
     {
      Comment("Non-trading Hours");
      return(0);
     }
   }
   if(Bars<100){
      Print("bars less than 100");
      return(0);
   }
   if(lStopLoss<10){
      Print("StopLoss less than 10");
      return(0);
   }
   if(lTakeProfit<10){
      Print("TakeProfit less than 10");
      return(0);
   }
   if(sStopLoss<10){
      Print("StopLoss less than 10");
      return(0);
   }
   if(sTakeProfit<10){
      Print("TakeProfit less than 10");
      return(0);
   }
   
   if (UseASCtrend)
{
ASCtrend = ASCTrend(RISK);
bool ASCtrendBuy  = ASCtrend>0 && ASCtrend1<0;  
bool ASCtrendSell = ASCtrend<0 && ASCtrend1>0;
} 
else {ASCtrendBuy = true; ASCtrendSell = true;}

   if(AccountFreeMargin()<(1000*Lots)){
      Print("We have no money. Free Margin = ", AccountFreeMargin());
      return(0);
   }
   if (!ExistPositions()){

      if ((ASCtrendBuy)){
         OpenBuy();
         return(0);
      }

      if ((ASCtrendSell)){
         OpenSell();
         return(0);
      }
   }
   if (ExistPositions()){
      if(OrderType()==OP_BUY){

         if ((ASCtrendSell)){
            CloseBuy();
            return(0);
         }
      }
      if(OrderType()==OP_SELL){

         if ((ASCtrendBuy)){
            CloseSell();
            return(0);
         }
      }
   }
   TrailingPositionsBuy(lTrailingStop);
   TrailingPositionsSell(sTrailingStop);
   ASCtrend1=ASCtrend;
   return (0);
}

bool ExistPositions() {
        for (int i=0; i<OrdersTotal(); i++) {
                if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
                        if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
                                return(True);
                        }
                } 
        } 
        return(false);
}
void TrailingPositionsBuy(int trailingStop) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { 
            if (OrderType()==OP_BUY) { 
               if (Bid-OrderOpenPrice()>trailingStop*Point) { 
                  if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss(Bid-trailingStop*Point); 
               } 
            } 
         } 
      } 
   } 
} 
void TrailingPositionsSell(int trailingStop) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { 
            if (OrderType()==OP_SELL) { 
               if (OrderOpenPrice()-Ask>trailingStop*Point) { 
                  if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss(Ask+trailingStop*Point); 
               } 
            } 
         } 
      } 
   } 
} 
void ModifyStopLoss(double ldStopLoss) { 
   bool fm;
   fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); 
   if (fm && UseSound) PlaySound(NameFileSound); 
} 

void CloseBuy() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); 
   if (fc && UseSound) PlaySound(NameFileSound); 
} 
void CloseSell() { 
   bool fc; 
   fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); 
   if (fc && UseSound) PlaySound(NameFileSound); 
} 
void OpenBuy() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   BroCoOrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy); 
   if (UseSound) PlaySound(NameFileSound); 
} 
void OpenSell() { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 

   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   BroCoOrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell); 
   if (UseSound) PlaySound(NameFileSound); 
} 
string GetCommentForOrder() {   return(Name_Expert); } 
double GetSizeLot() {   return(Lots); } 
double GetStopLossBuy() {       return (Bid-lStopLoss*Point);} 
double GetStopLossSell() {      return(Ask+sStopLoss*Point); } 
double GetTakeProfitBuy() {     return(Ask+lTakeProfit*Point); } 
double GetTakeProfitSell() {    return(Bid-sTakeProfit*Point); }

int ASCTrend( int risk )
{

   double smin, smax, bsmin, bsmax;
   int len = 3 + 2*risk;
   
   smin=Low[Lowest(NULL,0,MODE_LOW,len,1)]; 
   smax=High[Highest(NULL,0,MODE_HIGH,len,1)];

   bsmax = smax-(smax - smin)*(33.0-risk)/100.0;
   bsmin = smin+(smax - smin)*(33.0-risk)/100.0;

   asctrend = asctrend1;
   
   if(Close[1]>bsmax)  asctrend= 1; 
   if(Close[1]<bsmin)  asctrend=-1;
   
   asctrend1 = asctrend;
  return(asctrend);
}    
//+------------------------------------------------------------------+
//| Функция для работы с дилинговым центром BroCo                    |
//+------------------------------------------------------------------+
int BroCoOrderSend(string symbol, 
                 int cmd, 
                 double volume, 
                 double price, 
                 int slippage, 
                 double stoploss, 
                 double takeprofit, 
                 string comment, 
                 int magic, 
                 datetime expiration, 
                 color arrow_color)
{
   int ticket = OrderSend(symbol,cmd, volume, price, slippage, 0, 0, comment, magic, expiration, arrow_color);   
   int check = -1;
   if (ticket > 0 && (stoploss != 0 || takeprofit != 0)) {
      if (!OrderModify(ticket, price, stoploss, takeprofit,expiration, arrow_color)) {
         check = GetLastError();
         if (check != ERR_NO_ERROR) {
            Print("OrderModify error: ", ErrorDescription(check));
         }
      }
   } else {
      check = GetLastError();
      if (check != ERR_NO_ERROR){
         Print("OrderSend error: ",ErrorDescription(check));
      }
   }
   return (ticket);
}  
  
//----------------------------------------------------------------
Hi all! I have come across an old expert working with asctrend indicator. I would like to check how this indicator behaves in real time, but I cannot always follow the dots and my trading is not full. I checked the tester, there is a signal at every point, but put it on a demo and noticed the thing that the demo skips signals, while the log did not write anything to the expert, digging in the code and did not understand what the problem :( maybe someone poke a nose in what may be the problem?
 
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         for (  int y=OrdersTotal()-1; y>=0; y--) {Alert ("Здесь код для закрытия всех открытых позиций (тоже в цикле)",y);
           OrderSelect(y, SELECT_BY_POS );
              if (  OrderType( )==OP_BUY || OrderType( )==OP_SELL ){
                          OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse-2",  GetLastError( ) ); C=0;A=1; }} 
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         for ( int f=OrdersTotal()-1; f>=0; f--) {Alert("Здесь код для удаления всех отложенных ордеров (также в цикле)",f);
         OrderSelect(f, SELECT_BY_POS );
           if (  OrderType( )==OP_BUYSTOP || OrderType( )==OP_SELLSTOP ){ 
            OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse-2",  GetLastError( ) ); }}   // CloseAll();
         }
      }
I have written so far, and only the first alert message is logged
 

After reinstalling the terminal, MetaEditor stopped working. It only works if you don't change anything in the indicator code. If you change something, even the colour of the line, it generates an error:

The operating system is Windows 7. Who knows, maybe somebody faced such glitch. Can you tell me what to do?

 
Long code guys! I would like to reiterate that someone else's code is first of all a cryptogram, which has yet to be deciphered! And that's a lot of work! Do you think any programmer wants to dig through kilometres of listing? Let me give my code to one of you just for three thousand lines and ask to eliminate a small misunderstanding of this code. Do you think you just want to get into my brainchild? I doubt it again. So I have a request to you - when you ask a key question, describe the problem as briefly as possible and at the same time make the description sufficient to understand its essence. Otherwise your cry is a cry in the void. The code can be attached to the post. This is all necessary and sufficient.
Reason: