[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 88

 

一切都在这里 C:\Users\======AppData\Local\VirtualStore\Program Files\====== - MetaTrader\

愿景

 

请告知。

我写了一个简单的脚本(在靠近市场的两个方向设置两个吊坠,在新闻发布前把它放在图表上,这样我就不用手动操作了)。 这似乎要容易得多,但它不起作用,没有订单被打开,日志只是说脚本加载成功,然后在同一秒内立即删除!这是不可能的。它的编译没有错误。我把它转换为专家形式,即增加了init和deinit,在测试器中检查,它成功了。但是,正如你所理解的,我不需要一个专家顾问,而只是一个脚本。

这里有什么问题吗?预先感谢你。

以下是该脚本的代码。

#财产版权"alexey15"
#属性链接""
#property show_confirm

外部int SL = 15;
外部int TP = 90;
外置 int DELTA = 15;
外来的双数LOT = 0.1。
外部int SLIP = 3;

//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(,OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue)。
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);


//----
return(0);
}
//+------------------------------------------------------------------+

 
wiwkin52:

你好。请帮助。我卸载了MT和所有与之相关的指标,所有的指标。现在我安装了它,一切都还在。我应该怎么做?也许有指标和其他一切的副本存放在某个地方?

你只是卸载了,还是同时删除了Program Files中的MT文件夹?
 
alexey15:

请告知。

我写了一个简单的脚本(在靠近市场的两个方向设置两个吊坠,在新闻发布前把它放在图表上,这样我就不用手动操作了)。 这似乎要容易得多,但它不起作用,没有订单被打开,日志只是说脚本加载成功,然后在同一秒内立即删除!这是不可能的。它的编译没有错误。我把它转换为专家形式,即增加了init和deinit,在测试器中检查,它成功了。但是,正如你所理解的,我不需要一个专家顾问,而只是一个脚本。

这里有什么问题吗?预先感谢你。

以下是该脚本的代码。


我检查了一下。你的脚本是有效的。

打印错误以备不时之需。

int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int TicketBS,TicketSS;
TicketBS=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
TicketSS=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);
 if(TicketBS<=0 || TicketSS<=0)Print("Error = ",GetLastError());
//----
return(0);
}

 
alexey15:

请告知。

我写了一个简单的脚本(设置两个接近市场的挂件,在新闻发布前把它放在图表上,这样我就不用手动操作了)。 这似乎要容易得多,但它不起作用,没有订单被打开,日志只是说脚本加载成功,然后在同一秒内立即删除!这是不可能的。它的编译没有错误。我把它转换为专家形式,即增加了init和deinit,在测试器中检查,它成功了。但是,正如你所理解的,我不需要一个专家顾问,而只是一个脚本。

这里有什么问题吗?预先感谢你。

它对四位数的数字 起作用。我没有在五位数水平上进行检查,但我在StopLevel上增加了一个约束的检查。

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
原则上,你可以对四位数、五位数进行点调整,以避免错误。因为Delta水平应该是五位数的十倍,即150,而不是15,而停止和采取相应的...

那么它将看起来像这样。

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
double PointX;

if(Digits==5 || Digits==3) PointX = Point * 10;    // Корректировка Point под трёх- пятизнак
if(Digits==4 || Digits==2) PointX = Point;

int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*PointX;
double SELLPRICE = Bid - DELTA*PointX;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*PointX,BUYPRICE+TP*PointX,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*PointX,SELLPRICE-TP*PointX,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
 

早晨好!

有没有人对指数有什么提示......?

 
volshebnik:

早晨好!

有没有人对指数有什么提示......?

对,指数。
 
splxgf:
对,指数。
不好笑 )问题在这里 -https://www.mql5.com/ru/forum/131277/page87 但由于论坛管理员不建议重复问题,所以我没有再发。
 
volshebnik:

你好!

你能告诉我出了什么问题吗?我在英镑兑美元上使用测试器--它能按规定打开交易。我在美元指数DXH1上使用它 - 它没有打开很多交易,错误 "130" - 不正确的停止。此外,不清楚哪里出了问题--在类似的情况下,它打开和不打开,但不止于此。美元指数的价差和止损水平-100和200。GBPUSD-3和4的点差和止损水平。美元指数的价格,如78.150,在对-4位小数。但这是有依据的。

这里是代码的一部分。


就在我的脑海中。

1)SL和TP是非正常化的。

2) OrderSend在规范化时使用Digits,而订单是由Symb下的。

这样试试吧。

int opDigits=MarketInfo(Symb,MODE_DIGITS);
SL = NormalizeDouble(SL,opDigits);
TP = NormalizeDouble(TP,opDigits);
ОткрФрвверх = NormalizeDouble(ОткрФрвверх,opDigits);
ticketup=OrderSend(Symb, OP_BUYSTOP, Lot, ОткрФрвверх,0, SL, TP,NULL,A,0,вверх); // Ордер вверх
 
PapaYozh:


猜测一下。

1) SL和TP没有被规范化。

2)OrderSend使用Digits进行规范化处理,而顺序是由Symb设定的。

这样试试吧。

非常感谢您!它起作用了,但很少,有时会出现同样的错误 - 130.......(是否总是需要规范化止损,还是只在指数上?(在我看来,只是在货币对上的止损一直是有效的,没有正常化)。