Alert("Исполнение программы");
double p[100];
int i =0;
int n = OrdersTotal ();
int t =0;
for (i=0; i<=n+1; i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
p[i+1] = OrderProfit(); // р - це прибуток ордера
}
}
for (i=0; i<=n+1; i++)
{
if (p[i+1]>0) // якщо ордер прибутковий, то його
{
Alert("Є прибуток ордер ",i+1);
OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES);
Alert("Маємо помилку ",GetLastError());
Alert("Вибрали ордер ",i+1);
double ld_Price;
if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
else ld_Price = NormalizeDouble (Ask, Digits);
OrderClose (OrderTicket(), OrderLots(), ld_Price, 2); // треба зачинити Alert("Маємо помилку ",GetLastError());
Alert("Закрили ордер ",i+1);
if ( OrderType()==OP_BUY) // в залежності від того, якого типу ордер ми зачинили
{
Alert("Ордер типу бай");
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point); // змінюється порядок відкривання наступних ордерівAlert("Відкрили ордер типу селл");
Sleep(10000);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу бай");
}else
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу бай");
Sleep(10000);
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);
Alert("Відкрили ордер типу селл");
}
}
}
Alert("Последняя ошыбка ",GetLastError());
//----return(0);
}
//+----------------------------------------------------------------------------+bool ExistOrdersByPrice(string sy, int op, int mn, double pp) {
int i, k=OrdersTotal()-1;
for (i=k; i>=0; i--) {
if (OrderSelect(i,SELECT_BY_POS)) {
if (OrderMagicNumber()!=mn) continue;
if (OrderSymbol()!=sy) continue;
if (OrderType()!=op) continue;
if (MathAbs(OrderOpenPrice()-pp)<0.5*Point) return(true);
}
elsePrint("FUNC ExistOrdersByPrice() : ошибка выбора ордера "+GetLastError());
}
return(false);
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+if (!ExistOrdersByPrice(Symbol(), OP_BUYSTOP, Magic, 1.35000)) {
// тут код, если нет такого ордера
}
else {
// тут код, если есть такой ордер
}
//+----------------------------------------------------------------------------+
谢谢你的回答。我自己也很惊讶,这样的问题竟然出现了。虽然,也许我误解了我所看到的,也误解了引起这个问题的原因。
我现在正在看其他人的代码,看看用什么方法(与我的不同,也许更有效)来实现某些算法。现在我正在看臭名昭著的伊兰1.6专家顾问(附件)。我可以看出,它是由各种零件组装起来的,然后再进行重建。但是第337行包含了一个用户定义的尾随止损功能(尽管其使用的标志在开始时被强行清除了)。这个函数在第52行被调用。
我的问题是,上面提到的追踪止损通过止损来修改未平仓的 订单(可能有几个),保持其最初的止盈,但对这些订单设置相同的值(AveragePrice,在第173和178行计算)作为平仓价(OrderModify函数的第二个参数)。
或者,在修改未平仓订单时,该参数(未平仓价格)是否被服务器简单地忽略了,服务器可以设置任何价格?
当修改一个市场头寸时,价格应被设置并等于开盘价: OrderOpenPrise()
PS 如果我是你,我不会在这段代码中寻找 "高效的算法"--看起来这个人在写代码时并不真正了解他在那里做什么...
发现 "愚蠢 "是仁慈的,请怜悯一个被帕斯卡尔折磨的人。
当修改一个市场头寸时,价格必须被设置并等于头寸的开盘价:OrderOpenPrise()
那么这个功能,在你看来,将无法工作?我没有测试过它,但在我看来,它是工作代码的一部分(这个伊兰显然是从充其量是调试过的东西重建的)。还是说它仍然是一个蹩脚的代码?
PS 如果我是你,我不会在那段代码中寻找 "高效的算法"--看起来那家伙在写代码时并不真正了解他在那里做什么...
在正确的地方--那是哪个地方?
例如,一个订单已经在1200点了......而价格例如在下沉,星星已经排列好了,所以在这个地方必须下一个订单......而订单已经在那里了,不要把余额降低到所需的余额以下,以免每个人都下2个订单,例如
那么你认为这个功能就不能用了吗?我没有测试过它,但在我看来,它是工作代码的一部分(这个伊兰显然是从充其量是调试过的东西重建的)。还是说它仍然是一个蹩脚的代码?
嗯......这个代码不是真的。至少是这样。
Lommultiplicator = 网格中下一个订单的手数比例。
魔术=神奇的数字
我们像初始代码那样退出交易,即当第一笔订单关闭时,网格中的所有订单都将被关闭。
例如,在1200点已经有一个订单......而价格下跌,例如,星星排成一排,所以在这个地方必须下订单......而订单已经在那里了,不要把余额降低到所需的余额以下,以避免放置2个订单,每个1点,比方说
情况是这样的。
为了检查当前符号在1.35000的价格上是否有Magic的BuyStop订单,我们调用这个函数。
如果你说的是文件,在MetEditor中突出这个词,然后按F1。或者你可以上网,比如说。
https://docs.mql4.com/ru/customind/SetLevelStyle
当然谢谢你,但如果你懒得看问题,那么回答的意义何在?我可以在我的两个函数中改变指标中的水平值、厚度、颜色和风格。我没有机会看到描述。我再问一遍,有人知道答案吗?我不知道我以前是否见过它。
我附上一张图片,显示我需要的东西。