[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 292

 

你好。

请帮助我找出我做错了什么。

有条件地:Ask = 1.3000

PriceAsk = 1.3055 (包括Step=50和Srpead=3的情况)

boolBuyOrder=1

如果(Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0)为什么这个条件是真的?
 
ed3sss:

if 语句之前,立即打印出条件中所有变量的值

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
很可能有些变量值会与你想象的不同。
 
你好,在我的终端mt4中,当我点击一个直接在终端下的货币对,例如(eurusd)打开一个终端窗口,只有这个货币对我需要打开一个小窗口,然后将其扩展到右上角,这在以前从未发生过,请告诉我为什么会发生这种情况,如何解决?
 
GaryKa:

if 语句之前,立即记录条件中所有变量的值

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
很可能有些变量值会与你想象的不同。

看看吧,谢谢)
 
tohoz : 首先是一点儿理论。


现在的结论是

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
我想了解它是如何工作的。这就是为什么我问。
下划线的 表达式返回bd_LOTSTEP的十进制对数(以10为底的对数),即10的幂,得到bd_LOTSTEP。
 

GaryKa:

if 语句之前,立即记录条件中所有变量的值

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
当然,有些变量值不会是你想象的那样。


ed3sss:


看看吧,谢谢)

谢谢,发现了程序中的一个逻辑错误,现在一切正常了。
 

你好。

我怎样才能在图表上显示当前工具的铭文 未结订单的利润/损失。

在专家顾问中 很难检查 是否已经开仓(终端开/关),也很难在关闭终端前捡起最后一手的交易量。

谢谢你。

 
hoz:

我刚刚在这里遇到了一个功能。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
我想了解它是如何工作的。这就是为什么我问。

如果我错了,我道歉。MathLog(x)是ln(x)(自然对数)。转换公式是log_a(b)=ln(b)/ln(a),在这种情况下,我们得到ln(x)/ln(10)=lg(x)(十进制对数)。十进制对数的整数部分lg(1...9)为0,lg(10...99)为1,lg(100...999)为2,lg(1000...9999)为3,以此类推,即大于1的数字的对数等于该数字的位数 小数点之前,不要计算之后)减1。如果x是0到1,那么lg(0.1...0.9)的整数部分等于-1,lg(0.01...0.09)等于-2,lg(0.001...0.009)等于-3,以此类推,也就是说,如果你不看减数,0到1的数字的小数对数等于第一个有效数字之前的零的总数目。我不知道MathCeil是如何工作的,但如果它返回一个数字的整数部分,如果数字大于1,这个函数应该返回小数点 的数字数减去1,如果数字是0到1,则返回第一个有效数字前的零数。这个函数的最小值是在x等于1...9的范围内。从这里开始,对于10...99和0.1...0.9,这个函数等于1,对于100...999和0.01...0.09,等于2,以此类推。这个想法是...
 

下午好,程序中出现了一个错误,我已经绞尽脑汁了,请指点一下哪里出了问题。只是想知道为什么修改条件不工作。即使条件不真实,它仍然被满足,因此,当修改错误或1,或130时。谢谢大家。

//--------------- 修改TP下的命令-------------------
for (i = OrdersTotal() - 1; i >= 0; i--){
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)继续。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
如果(OrderType() == OP_BUY){
如果(OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates()。
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE) 。
}
}
如果((OrderType() == OP_SELL)){
如果(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates()。
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE) 。
}
}
}
}
return(0);
}

double LastOpPrBuy(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(va == 0) va = OrderOpenPrice()。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)继续。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
如果(OrderType() == OP_BUY && OrderOpenPrice() <va) va = OrderOpenPrice()
}
返回(va)。
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(va == 0) va = OrderOpenPrice()。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)继续。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
如果(OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
返回(va)。
}
//----------------------------------------------------------------------------------
double OprTPB(int TP)
{
int j=0。
双重TPB=0。
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)继续。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
如果(OrderType() == OP_BUY)
{
TPB+=OrderOpenPrice()。
j++;
}
}
如果(j==0){
j++;
TPB=问。
}
TPB=(TPB/j)+TP*Point。
返回(TPB)。
}
//----------------------------------------------------------------------------------
double OprTPS(int TP)
{
int j=0。
双倍TPS=0。
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)。
如果(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)继续。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
如果(OrderType() == OP_SELL)
{
TPS+=OrderOpenPrice()。
j++;
}
}
如果(j==0){
j++;
TPS=投标。
}
TPS=(TPS/j)-TP*Point。
返回(TPS)。
}
//----------------------------

 
borilunad:
我们在这里都是新手!不要看我们不知道简单的事情!我们还能在哪里找到答案呢!?至少我们想知道,而不是像有些人认为的那样,只要求输入代码就能马上抽钱!"。


)))从一个交易员的幽默中。

- 我在哪里可以得到一个有利可图的专家顾问?

- 看看上面的某处主题,他们发布了一个名为@MOZG@v4.12 的机器人。