Помощь в кодировании - страница 667

 
Мне нужно, чтобы кто-то помог мне превратить это пересечение ema в советника. открыть покупку, когда появляется синяя стрелка и продать, когда появляется красная стрелка выйти из сделки, когда свеча рядом со стрелкой закрывается. пожалуйста, пусть SL и TP будут регулируемыми и MAs. я просто хочу использовать его для торговли свечами.
 
dotmund:
Мне нужно, чтобы кто-то помог мне превратить это пересечение ema в советника. открывайте покупку, когда появляется синяя стрелка, и продавайте, когда появляется красная стрелка. выходите из сделки, когда свеча рядом со стрелкой закрывается. пожалуйста, пусть SL и TP будут регулируемыми и MAs. я просто хочу использовать его для торговли свечами.
Посмотрите этот пост: https: //www.mql5.com/en/forum/180648/page940
 
mladen:

Для времени свечи лучше всего использовать специализированный индикатор (как в приложении).

Что касается разделителя периодов: это уже nmc, но вы можете использовать прилагаемый (он должен быть легче на процессоре).

Большое спасибо. Я пытаюсь добавить опцию "BarsLimit", но у меня не получается. Не могли бы вы мне помочь, пожалуйста. Большое спасибо за ваше время.
Файлы:
 
Entropy:
Большое спасибо. Я пытаюсь добавить опцию "BarsLimit", но у меня не получается. Не могли бы вы мне помочь, пожалуйста. Большое спасибо за ваше время.

Энтропия

Вот версия с добавленной опцией

Файлы:
 

Здравствуйте mladen можете ли вы научить меня решать декларацию .

Вот что я получаю предупреждение .

declaration of 'MinLots' hides global declaration at line 93    
declaration of 'MaxLots' hides global declaration at line 94    
declaration of 'Magic' hides global declaration at line 118     
void CalculateMM()
{
   double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   Lots=AccountFreeMargin()/100000*RiskPercent;
   Lots=MathMin(MaxLots,MathMax(MinLots,Lots));
   if(MinLots<0.1)Lots=NormalizeDouble(Lots,2);
   else
   {
     if(MinLots<1)Lots=NormalizeDouble(Lots,1);
     else Lots=NormalizeDouble(Lots,0);
   }
   if(Lots<MinLots)Lots=MinLots;
   if(Lots>MaxLots)Lots=MaxLots;
   return;



int CloseBuyOrders(int Magic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
      {
       ClTicket= OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

int CloseBuyOrdersHiddenTP(int Magic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY&&Bid>(OrderOpenPrice()+TakeProfit*Point))
      {
        ClTicket=OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

Спасибо .

 
stevenpun:

Здравствуйте mladen можете ли вы научить меня решать декларацию .

Вот что я получаю предупреждение.



Спасибо .

Сначала это :

void CalculateMM()
{
   double tMinLots=MarketInfo(Symbol(),MODE_MINLOT);
   double tMaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
   Lots=AccountFreeMargin()/100000*RiskPercent;
   Lots=MathMin(tMaxLots,MathMax(tMinLots,Lots));
   if(tMinLots<0.1)Lots=NormalizeDouble(Lots,2);
   else
   {
     if(tMinLots<1)Lots=NormalizeDouble(Lots,1);
     else Lots=NormalizeDouble(Lots,0);
   }
   if(Lots<tMinLots)Lots=tMinLots;
   if(Lots>tMaxLots)Lots=tMaxLots;
   return;

и это

int CloseBuyOrders(int tMagic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==tMagic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
      {
       ClTicket= OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}

int CloseBuyOrdersHiddenTP(int tMagic)
{
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) 
    if(OrderMagicNumber()==tMagic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY&&Bid>(OrderOpenPrice()+TakeProfit*Point))
      {
        ClTicket=OrderClose(OrderTicket(),OrderLots(),Bid,3);
      }
    }
  }
  return(0);
}
 

Здравствуйте, Младен,

Не могли бы вы подсказать мне с этим кодом, сэр, что нужно исправить?

Также, когда он переходит на более высокий таймфрейм, возможно ли изменить его с

===> 1 мин ~ 30 мин ==> каждые 10 пунктов

===> 1 час ======> каждые 50 пунктов

===> 4 часа, день ======> каждые 100 пунктов

===> Еженедельно, ежемесячно ===> каждые 1000 пунктов

Желательны прямоугольники вместо линий сер.

#property indicator_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



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

//| Пользовательская функция инициализации индикатора |

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

int init()

{

//---- индикаторы


//----

return(0);

}

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

//| Пользовательская функция деинициализации индикатора | |

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

int deinit()

{

//----

for (int ix = 0; ix < nLines; ix++) // удаляем мои горизонтальные линии

{

ObjectDelete("tensLines "+ix);

}


//----

return(0);

}

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

//| Пользовательская функция итерации индикатора |

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

int start()

{

int nLines = 40; // Количество всех линий для рисования

double lineInterval = 0.0010; // Интервал между линиями

double normPrice = NormalizeDouble(Close[1],3); // Текущая цена округляется до ближайшей "10"


for (int ix = 0; ix < nLines; ix++) // Зацикливаем промежуток времени несколько раз

{

if(ObjectFind("tensLines "+ix) < 0)

ObjectCreate("tensLines "+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Размещаем половину выше и половину ниже текущей цены


else ObjectSet("tensLines "+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines "+ix,OBJPROP_COLOR,DarkSlateGray); // Чтобы линии выглядели лучше

}

//----

return(0);

}

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


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(on, name);

if (iPos < 0) continue;

if (iPos > 0 && where == ONDA_BEGINS) continue;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

 
murnathan32:

Здравствуйте, Младен,

Не могли бы вы подсказать мне с этим кодом, сэр, что нужно исправить?

Также, когда он переходит на более высокий таймфрейм, возможно ли изменить его с

===> 1 мин ~ 30 мин ==> каждые 10 пунктов

===> 1 час ======> каждые 50 пунктов

===> 4 часа, день ======> каждые 100 пунктов

===> Еженедельно, ежемесячно ===> каждые 1000 пунктов

Желательны прямоугольники вместо линий сер.

#property indicator_chart_window

#define ONDA_BEGINS 0

#define ONDA_CONTAINS 1



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

//| Пользовательская функция инициализации индикатора |

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

int init()

{

//---- индикаторы


//----

return(0);

}

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

//| Пользовательская функция деинициализации индикатора | |

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

int deinit()

{

//----

for (int ix = 0; ix < nLines; ix++) // удаляем мои горизонтальные линии

{

ObjectDelete("tensLines "+ix);

}


//----

return(0);

}

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

//| Пользовательская функция итерации индикатора |

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

int start()

{

int nLines = 40; // Количество всех линий для рисования

double lineInterval = 0.0010; // Интервал между линиями

double normPrice = NormalizeDouble(Close[1],3); // Текущая цена округляется до ближайшей "10"


for (int ix = 0; ix < nLines; ix++) // Зацикливаем промежуток времени несколько раз

{

if(ObjectFind("tensLines "+ix) < 0)

ObjectCreate("tensLines "+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval)); // Размещаем половину выше и половину ниже текущей цены


else ObjectSet("tensLines "+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

ObjectSet("tensLines "+ix,OBJPROP_COLOR,DarkSlateGray); // Чтобы линии выглядели лучше

}

//----

return(0);

}

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


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

{

string on = ObjectName(iObj);

int iPos = StringFind(on, name);

if (iPos < 0) continue;

if (iPos > 0 && where == ONDA_BEGINS) continue;

if (type == EMPTY) ObjectDelete(on);

else if (type == ObjectType(on)) ObjectDelete(on);

}

}




//---

Попробуйте так

#property indicator_chart_window

#define  ONDA_BEGINS   0

#define  ONDA_CONTAINS 1


    int nLines = 40;                                   // Number of total line to draw

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

//| Custom indicator initialization function                         |

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

int init()

  {

//---- indicators


//----

   return(0);

  }

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

//| Custom indicator deinitialization function                       |

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

int deinit()

  {

//----

    for (int ix = 0; ix < nLines; ix++) // delete my horizontal lines

      {

      ObjectDelete("tensLines"+ix);

      }


//----

   return(0);

  }

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

//| Custom indicator iteration function                              |

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

int start()

  {


   double lineInterval = 0.0010;                      // Interval between lines

   double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"


   for (int ix = 0; ix < nLines; ix++)                // Loop span number of times

      {

      if(ObjectFind("tensLines"+ix) < 0) 

         ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price


      else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));

      ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better

      }

 

//----

   return(0);

  }

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


void ObjectNameDeleteAll(string name, int where=ONDA_BEGINS, int type=EMPTY)

{

    for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--)

    {

        string on   = ObjectName(iObj);

        int    iPos = StringFind(on, name);

        if (iPos < 0)                         continue;

        if (iPos > 0 && where == ONDA_BEGINS) continue;

        if      (type == EMPTY)         ObjectDelete(on);

        else if (type == ObjectType(on)) ObjectDelete(on);

    }

}



 
Привет, ребята, ищу кого-нибудь, кто напишет для меня код на python, готов заплатить за работу или если кто-то сделает это бесплатно, это тоже круто lol. но просто свяжитесь со мной в любое время и дайте мне знать, если кто-то может мне помочь, я расскажу подробнее, как только привлеку чье-то внимание. это будет на полосах Боллинджера в основном с парой других индикаторов. спасибо за помощь, ребята!
 
mladen:

Попробуйте вот так

Вау. Ты настоящий мужчина. Спасибо Младен за благословения.

Еще одна просьба. Можете ли вы сделать сетку в виде прямоугольников, как на картинке ниже. Например, 10 пунктов на прямоугольник. Пусть прямоугольник проецирует будущее.

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

    ObjectCreate("Rect02", OBJ_RECTANGLE, 0, Time[0], Bid, Time[Bars], (Bid+0.0010) ); //make bar above cur price
      ObjectSet("Rect02", OBJPROP_COLOR, Silver );
      }
//================= Move the Rect with new ticks/candles ===========================
   
   else {
      ObjectMove("Rect01", 0, Time[0], WindowPriceMin()*0.95);
      ObjectMove("Rect02", 0, Time[0], Bid); 

}

Файлы: