新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 707

 
Roman Shiredchenko:

这不是一个笑话,我不是这样嘲弄的。

在你发表异端言论之前,请仔细看一下图片。

这个话题太老套了,读起来让人反感.........然后是视觉效果的缺失,然后是优化...

把窗口拓宽,你就会很高兴。不要混淆哪个窗口要展开。

 
ilvic:

问题在于屏幕分辨率。

非常感谢你,开始通过看图片来猜测......

 
ilvic:

问题在于屏幕分辨率。

再次感谢。一切正常,问题出在文字大小(字体)的显示上


 
下午好,请帮助找到指标代码中的一个错误,注释在代码中,蓝色不想要画,因为我想写。想法是找到从上次更新到上次更新高位绿线的时间范围内最小的低值。谢谢。
{

if(prev_calculated<1) limit=rates_total-1;
if(prev_calculated>0)limit=rates_total-prev_calculated;
for(i=limit; i>=0; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime(Symbol(),0,i+1))-TimeDayOfWeek(iTime(Symbol(),0,i));
if (yesterday_weekday !=0) // находим открытие нового дня
{

BH=open[i];BL=open[i]; // переменные ХАЙ ЛОУ  
Closebar=open[i]; // искомая переменная 
NHT=time[i]; // переменная время последнего обновления ХАЙ
PHT=time[i]; // переменная время предпоследнего обновления хай
}
CloseD[i]=Closebar; // буфер отрисовки искомая переменная СИНИЙ ЦВЕТ
HD[i]=BH;  // буфер отрисовки ХАЙ
LD[i]=BL; // буфер отрисовки ЛОУ

if (Fun_New_Bar==false)  // находим закрытие бара                             
    {                                             
     if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];

if(iHigh(NULL,0,i+1)>BH) // проверяем есть ли обновление Хай
{
C=PHT; // присвоим переменной время предыдущего бара обновления Хай 
NHT=iTime(NULL,0,i+1); // находим время обновления Хай
Pshift=iBarShift(NULL,0,C); // находим индекс бара предыдущего обновления Хай 
P=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,Pshift,i+1)); // находим наименьшее значение Лоу от обновления Хай настоящего до предыдущего (искомая величина) 
BH=iHigh(NULL,0,i+1); // прорисовываем Хай новый
Closebar=P; // прорисовываем искомую величину 
PHT=NHT; // сохраняем время последнего обновления Хай
} 
     
                             
      Fun_New_Bar=false; // ждем закрытие нового бара                           
     }
     }

Comment( NHT, C , Pshift ); // проверка

if(low[i]<BL)  BL=low[i]; // в процессе

}
   return(rates_total);
  }


 
下午好!对EA的帮助我需要做一个正常的追踪止损,分步进行,并将SL移至Breakeven!!!。换句话说,订单被打开,在25个(比喻)正确的方向上的点之后,SL立即 被设置为开盘价!

我有这样的代码,但它跟随价格,并在开盘价上停止!这是什么意思?


bool tkt;
  for (int i = 0; i < OrdersTotal(); i++) 
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if (OrderType() == OP_BUY)
      {
      if(NormalizeDouble(OrderStopLoss(), Digits) < NormalizeDouble(OrderOpenPrice(), Digits) && 
      NormalizeDouble(Ask - OrderStopLoss(), Digits) > NormalizeDouble(TrailingStop * Point, Digits))
      tkt = OrderModify(OrderTicket(), 0, Ask - TrailingStop * Point, OrderTakeProfit(), OrderExpiration(), clrNONE);
      Print("Error setting Buy trailing stop: ", GetLastError());
      }
         
      if (OrderType() == OP_SELL)
      {
      if(NormalizeDouble(OrderStopLoss(),Digits) > NormalizeDouble(OrderOpenPrice(), Digits) && 
      NormalizeDouble(OrderStopLoss() - Bid, Digits) > NormalizeDouble(TrailingStop * Point, Digits))
      tkt = OrderModify(OrderTicket(), 0, Bid + TrailingStop * Point, OrderTakeProfit(), OrderExpiration(), clrNONE);
      Print("Error setting Sell trailing stop: ", GetLastError());
      }  
           }
   } 
我已经用头撞墙一个星期了!
 
ponochka:
下午好!对EA的帮助我需要做一个正常的追踪止损,分步进行,并将SL移至Breakeven!!!。即:一个订单被打开,在25个(比喻)正确的方向上的点之后,SL立即 被设置为开盘价!这就是所谓的SL。

我有这样的代码,但它跟随价格,并在开盘价上停止!这是什么意思?


我已经用头撞墙一个星期了!

请为我自己写,也使用它们。

//======= Глобальные переменные

extern bool   UseBreakeven       = true;          //Использование безубытка
extern int    Breakeven          = 20;            //Профит безубытка
extern int    ValueBreak         = 3;             //Безубыток
extern bool   UseTrailingStop    = true;          //использование трейлинг стопа
extern int    TrailingStop       = 40;            //Величина трала
extern int    TrailingStep       = 3;             //Шиг трала 

double SL, TP;

//нннннннннннн Функция перевода в безубыток нннннннннннннннннннннннннннннннннннннннннннн
void BreakevenModify()
{ 
   int    i;
   double sl;
   
   int total = OrdersTotal();
   
   if(UseBreakeven)
   {
      for(i = total-1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         { 
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
            {
               if(OrderType() == OP_BUY)
               {
                  if(OrderStopLoss() < OrderOpenPrice() && (OrderOpenPrice() + Breakeven*point) <= Bid)
                  {   
                     sl = NormalizeDouble(OrderOpenPrice() + ValueBreak*point, Digits);
                     
                     OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                  } 
               }
            }
         }
      
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         { 
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
            { 
               if(OrderType() == OP_SELL)
               {
                  if(OrderStopLoss() > OrderOpenPrice() && (OrderOpenPrice() - Breakeven*point) >= Ask)
                  { 
                     sl = NormalizeDouble(OrderOpenPrice() - ValueBreak*point, Digits);
                     
                     OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                  } 
               }
            }
         }
      }
   }
}
//нннннннннннн Функция трейлинг стопа ннннннннннннннннннннннннннннннннннннннннннннннннннннн
void TrailingStopLoss()
{   
   int    i;
   double sl;
   
   int total = OrdersTotal();
   
   if(UseTrailingStop)
   {
      for(i = total-1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
               if(OrderType() == OP_BUY) 
               {
                  if((OrderOpenPrice() + TakeProfit3*point) <= Bid)
                  {
                     if(OrderStopLoss() > OrderOpenPrice() && OrderStopLoss() + (TrailingStop + TrailingStep)*point <= Bid)
                     {
                        sl = NormalizeDouble(OrderStopLoss() + TrailingStep*point, Digits);
                        
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                     } 
                  }  
               }
            }
         }
      
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {     
               if(OrderType() == OP_SELL)
               {
                  if((OrderOpenPrice() - TakeProfit3*point) >= Ask)
                  {
                     if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() - (TrailingStop + TrailingStep)*point >= Ask)
                     {
                        sl = NormalizeDouble(OrderStopLoss() - TrailingStep*point, Digits);
                        
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                     } 
                  }  
               } 
            }
         }
      }
   }
}


我为自己写,并使用它们。

 
Youri Lazurenko:

拜托,我是为自己写的,为自己用的。

这只是为测试人员准备的 :-)

在现实生活中,根据出价(Bid)、要价(Ask)来进行拖网是非常危险的。

 
Rustam Bikbulatov:
嗨,伙计们。请你告诉我,为什么我有几十个订单是以交错的顺序或不同的方式关闭的?我应该如何修复它?有没有一种方法可以一次性将它们全部关闭?

在最后关闭,而不是在开始。

for(int i=OrdersTotal()-1; i>=0; i--)
还是我必须自己做一个清单,然后根据它来关闭订单?
 
Taras Slobodyanik:

结束时,而不是开始时

还是你自己制定清单,用它来关闭?

你如何制定一个清单?

 
嗨,伙计们。请你告诉我,为什么我有几十个订单的关闭顺序是交错的,或者根本不一样?我怎样才能解决这个问题?有没有一种方法可以一次性将它们全部关闭?
void CloseOrdB(){  
     for(int i=0;i<OrdersTotal();i++){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==456){    
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,clrBlue)){CloseOrdB();}}}} }