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

 
Yan Barmin:
困惑。我如何获得MT4上未平仓订单(非挂单)的真实利润(亏损),包括所有佣金、掉期等?(OrderProfit() + OrderSwap() + OrderCommission() 或只是OrderProfit() 或其他?我希望在订单结束后能赚到一些钱。
 OrderProfit() + OrderSwap() + OrderCommission()
 

如何在地下室窗口的蜡烛上放置这些体积的数字,即在底部,或使所有的数字都作为一条线水平地放在中心,如果地下室不起作用。如果能得到帮助,我将非常感激。

#property indicator_chart_window

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 4
#property indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Maroon
#property indicator_color3 黄色
#property indicator_color4 Blue
#property indicator_color5 DeepPink

外部int BarsToCount = 990;

外部字符串pus1 = ""。
外部字符串p_s = "点数设置"。
外部 bool use_points = true。
外来的int distance_point = 5;
外部颜色 color_point_u = Lime;
外部颜色 color_point_d = DeepPink;
外部颜色 color_point_s = 黄色。
外来的inttern size_point = 14;

外部字符串 pus2 = ""。
外部字符串s_w = "Way"。
外部 bool use_show_same_way = true。
外部 bool use_show_daily_way = true;

外部字符串 pus3 = ""。
外部字符串al = "Alerts"。
外部 bool use_alerts = false。
外部字符串up_alert = "Up"。
extern string down_alert = "Down";


双倍增加[]。
双降[]。
double mid[];
double up2[]。
双倍下降2[]。
双重无[]。

static int prevtime = 0;

//
int init()
{

IndicatorShortName("A")。
return(0);
}

//
int deinit()
{
字符串name_de。
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0)。
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
return(0);
}
//////////////////////////////////////////
int start()
{
////////////
up[0]=EMPTY_VALUE。
down[0]=EMPTY_VALUE。
mid[0]=EMPTY_VALUE。
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
如果(use_points)
Ob_cre(0);

if(!use_points)
Ob_del(0)。
////////////
如果(Time[0] == prevtime) 返回(0)。
prevtime = Time[0];
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
如果(use_points)
Ob_cre(c);

if(!use_points)
Ob_del(c);
////////////
up[c]=EMPTY_VALUE。
down[c]=EMPTY_VALUE。
mid[c]=EMPTY_VALUE。
up2[c]=EMPTY_VALUE。
down2[c]=EMPTY_VALUE。

/////////////////
如果(Close[c]>Open[c]) up[c]=Volume[c]。
如果(Close[c]<Open[c]) down[c]=Volume[c];
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
如果(use_show_same_way)
{

如果(Close[c]>Open[c] && Close[c+1]>Open[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE。
}

如果(Close[c]<Open[c] && Close[c+1]<Open[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE。
}

}


如果(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alert(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alert(down_alert);
}
}
return(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
空白Ob_cre(int num_of_bar)。
{
string name="Vol_"+DoubleToStr(num_of_bar,0)。

color col_po;
如果(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
如果(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
如果(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

如果(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_TEXT,0,0)。
}
ObjectSet(name,OBJPROP_TIME1,Time[num_of_bar])。
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point) 。
ObjectSet(name,OBJPROP_ANGLE,90)。
ObjectSetText(name,DoubleToStr(Volume[num_of_bar],0),size_point, "Arrial",col_po)。
ObjectSet(name,OBJPROP_ANCHOR,ANCHOR_CENTER)。
}

//
空白 Ob_del(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0)。
}

附加的文件:
 

我创建了一个基于欧元兑美元 的合成符号,名为ZIGZAG(以避免名称冲突)。

我导入了分钟条形图,所有的东西都成功导入了,但在重新请求时,条形图的数量 是0。在 "历史/符号 "文件夹中,有一个创建的39mb 的文件 "2019.hcc",在 "ticks "文件夹中,所有东西都是空的。改变了终端(当前版本来自2019年5月30日),电脑--到处都不工作。

可能的错误是什么?

附加的文件:
simvol.zip  809 kb
 
SEM:

我创建了一个基于欧元兑美元 的合成符号,名为ZIGZAG(以避免名称冲突)。

我导入了分钟条形图,所有的东西都成功导入了,但在重新请求时,条形图的数量 是0。在 "历史/符号 "文件夹中,有一个创建的39mb 的文件 "2019.hcc",在 "ticks "文件夹中,所有东西都是空的。改变了终端(当前版本为2019年5月30日),电脑--到处都不工作。

可能的错误是什么?

在匹配的名称中
 
大家好,请问如何改进演示版的MT4文章平衡,并使其可以改变?酌情改变演示平衡的可能性会是什么。或者是充值.或者撤销模拟,让模拟的交易与真实的交易一样接近?
 
oleqas1:
你好,请问你想如何改进模拟版的MT4文章余额,并使其可编辑?自己演示平衡的可能性会是什么,以改变。或者是充值.或者提取模拟资金,使模拟交易接近真实交易?

MetaTrader4将不再被更新--这个平台的开发早就停止了。最多,重大的错误正在被修复。

转到MetaTrader5并使用TesterWithdrawal()。

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
你好,请问如何计算欧洲时段3天内的波动率?
 

你好,如果有比如说买入止损点和买入限价。

一个买入止损点被打开,修改buyimit并设置一个新的买入止损点。

打开buyimit需要修改buystop并设置一个新的buyimit。

我尝试这样做,它打开了,但错误信息OrderModify error 1, OrderModify error 130。如何解决这个问题,我想不出来。请帮助我。


void OnTick()
  {
      price_buystop = NormalizeDouble(Ask+StopLoss*Point,Digits);
      price_buyLimit = NormalizeDouble(price_buystop-StopLoss*2*Point,Digits);
      price_buy = PriceOpenLastPos();
      
      //для байстоп
        if (BuyStopCount()==0)//если нет байстопа
       { 
       TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);  
       if(CountBuy()==0)// и нет открытых бай 
       {    
       int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
       if (ticket <0) Print ("Не удалось открыть buystop ");
       }
         if (CountBuy()>=1) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble(price_buy + StopLoss*Point,Digits);
        int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
        if (ticket <0) Print ("Не удалось открыть buystop ");            
         } 
      } else {   //если есть байстоп модифицируем
      if (CountBuy()>=1)//и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
         TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);     
         }   
      }
      
   //для байлимит
        if (BuyLimitCount()==0) // если нет байлимит
       {   
       TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits); 
        if(CountBuy()==0)// и нет открытых открываем
        {
         int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);       
         if (ticket <0) Print ("Не удалось открыть BuyLimit ");   
        }
        if (CountBuy()>=1)// если открытая есть
         {         
        price_buyLimit = NormalizeDouble(price_buy - StopLoss*Point,Digits);       
        int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);         
        if (ticket <0) Print ("Не удалось открыть BuyLimit ");            
         }           
      }  else { // если есть байлимит и есть открытая
       if (CountBuy()>=1)
         {
         price_buyLimit = NormalizeDouble(price_buy-StopLoss*Point,Digits);         
         TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP,0,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
  int BuyStopCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
    return(count); 
  }
  
  // проверяем есть ли ,байлимит ордера с конца
  int BuyLimitCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
    return(count);      
  }
  
   //проверяем открытые ордера покупку
  int CountBuy()
  {
  int count = 0;
  for (int trade = OrdersTotal()-1; trade>=0; trade --)
  {
    if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) ==true)
    {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   }return(count);
  }
  
  
  // возвращает цену открытия последней открытой позиции
  
  double PriceOpenLastPos()
{
int k=OrdersTotal();
double r =0;
int i;

for (i=0; i<k; i++)
  {
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   {
    if (OrderSymbol()== Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
}return (r);
}


 

在MT4的策略测试器中测试EA时,这些错误与什么有关?


 
Alexandr Sokolov:

在MT4的策略测试器中测试EA时,这些错误与什么有关?


负载历史。F2.