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

 
Alexey Viktorov:
我给你说。但要想知道这是 "交易 "窗口,而不是 "账户历史 "窗口,需要花费很大的精力。由于注意力不集中和懒惰,在没有拉动头部肌肉的情况下,我相信是账户历史窗口的问题。

它发生了。可以原谅。

 

由于读五位数不方便,禁用了图表上的标准买入线,在上角做了4位数的输出,但有时价格会下降,这又造成了不便:-)

我想让Label对象随着价格移动,右边的价格标签OBJ_ARROW_RIGHT_PRICE 我不喜欢,因为有框架。

但由于某些原因,按价格出价定位不起作用,标签显示在左上角


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

#property indicator_chart_window
#property strict

//---- input parameters
input color Clock_Color = clrCrimson;

string objname="Bid";


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
        
    

        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { ObjectDelete(0, objname); } 

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spreads[])
{

        ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));     
        ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Clock_Color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");
        
        return(rates_total);
}
 
psyman:

由于读五位数不方便,禁用了图表上的标准买入线,在上角做了4位数的输出,但有时价格会下降,这又造成了不便:-)

我想让Label对象随着价格移动,右边的价格标签OBJ_ARROW_RIGHT_PRICE 我不喜欢,因为有框架。

但由于某些原因,按价格出价定位不起作用,标签显示在左上角


对于OBJ_LABEL,位置报告是以像素为单位指定的。

ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); // x, y добавьте в переменные, тип int
ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, ulong(y)); //если на эту строчку будет предупреждение в компиляторе то, значит ulong ненужен
//ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));
ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
 
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Znomer()
{
zn=0; // z-число
psd=0; // кол. положительных сделок
usd=0; // количество отрицательных сделок 
ww=0; // боол переменная 
nn=0; // боол переменная
C=0; // C = количество чередований между отрицательными и положительными сделками
index=OrdersHistoryTotal(); 
if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
if(index<30) return(1); // берём не менее 30
count=OrdersHistoryTotal(); // считаем от скольки 
prom=count-index; // выделяем только последние сделки
if (prom<0) prom=0; // исключаем ошибки

for( i=count;i>prom;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)== true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{// далее магия
pribul=OrderProfit(); 
if (ww==0&&pribul>1){C++;ww=1;nn=0;}// подсчитываем смену тенденции
if (nn==0&&pribul<1){C++;ww=0;nn=1;}// подсчитываем смену тенденции 
if (pribul>1){psd++;}//прибыльные сделки
if (pribul<1){usd++;}// убыточные сделки

}
}
}
/*/*
Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
*/
zn = (index*(C-0.5)-(2*psd*usd))/
((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*0.5));



return(zn);
}

我决定写一个简单的代码来计算失去一个账户的趋势。为此,我采用了一个简单的Z型账户公式,并试图将其转移到mq4代码中。
一切似乎都是正确的,但当我用打印法运行简单的输出时,EA却不能立即工作。编译时我没有得到任何错误。
我已经在简单的代码上绞尽脑汁了。

如果你能提供帮助,谢谢!

 
Aliaksei Karalkou:

我决定写一个简单的代码来计算丢失账户的趋势。为此,我采用了一个简单的Z型账户的公式,并尝试在mq4代码中使用它。
一切似乎都是正确的,但当我用打印法运行简单的输出时,EA却不能立即工作。编译时我没有得到任何错误。
我已经在简单的代码上绞尽脑汁了。

如果你能提供帮助,谢谢!

检查EA的工作许可。那么在打印输出中的什么地方呢?这段代码必须返回一些东西,如果没有错误,那么问题就在这段代码之外。除了在此块中可能出现除以0的情况。

 
Ilya Prozumentov:

对于OBJ_LABEL,位置报告是以像素为单位指定的。

伊利亚,谢谢你,它成功了。

只有在进入下一阶段时--考虑到窗口大小的调整--编译器才会给出一个关于数据类型转换的警告。

int width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

由于类型转换可能造成的数据损失 4digit+.mq5 36 14


尽管该函数返回int类型。


 
psyman:

伊利亚,谢谢你,它成功了。

只有在进入下一阶段时--考虑到窗口大小的调整--编译器才会给出一个关于数据类型转换的警告。

由于类型转换可能造成的数据损失 4digit+.mq5 36 14


尽管该函数返回的是int类型。


该函数返回长类型
 
novichok2018:

真的吗? 而且哪里显示订单已经结束?

交易 "窗口中的绿色TP意味着当前价格 在TP的-100点以内,或者更正确地说,在TP的100点以内。

谢谢你!
 
Artyom Trishkin:
该函数返回长类型

在这种情况下,我应该怎么做,改变变量的类型还是保持原样?

 
psyman:

在这种情况下建议怎么做,是改变变量的类型还是保持原样?

int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
原因: