KimIV的有用功能 - 页 8

 

有很多问题...
我的意思是,它们经常出现,但都是在个案的基础上。

对于那些现在已经公布的功能,没有任何问题,因为我只是在单位里看,没有 "感觉"。
另外,除了它们之外,还有关于早期代码的问题,特别是关于拖尾,这与
与上面写的:如何,为什么要传递给函数,例如,这个尾部的部分让我不解。

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm) PlaySound("expert.wav");
}
ldStopLoss的作用还不清楚......。
 

oooo...:-)就是这样一个古老的功能。它被设计用来改变未平仓头寸或定单的止损水平。还有一个类似的功能,用于获取利润。它们都被一个更好、更实用的ModifyOrder() 所取代。

kombat:
ldStopLoss的作用还不清楚......。

这是一个局部变量,通过这个变量,应该设置止损的价格水平被传递给修改止损的函数。例如,让我们这样调用ModifyStopLoss函数。

ModifyStopLoss(1,5662);

那么本地变量ldStopLoss将取值1.5662。你可以这样检查。

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;
 
  Print("ldStopLoss=",ldStopLoss);
 
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm) PlaySound("expert.wav");
}

在日志中会有这样的记录。

<Время> <Эксперт> <Инструмент>,<таймфрейм>: ldStopLoss=1.5662
 
KimIV:

oooh...:-)就是这样一个古老的功能。它被设计用来改变未平仓头寸或定单的止损水平。还有一个类似的功能,用于获取利润。它们都被更完善、更实用的ModifyOrder() 所取代。


所以...古老的......。(有点尴尬 :) ))我扫了一眼文件夹,最古老的文件是2006年1月22日的。而且看起来它甚至没有被我的曲柄篡改过......。 对不起,我已经练习了很长时间的简单的事情,例如:改变一个数字。简单的计算器,等等...



所有这一切都始于一个要求,即在PRDC的一个论坛上写一个专家顾问,但...
我的美分不够,但我必须在市场上购买。
现在我对它上瘾了......这很方便...。一切都在那里...单元等,结构紧凑,便于携带。

我记得我第一次也是最后一次尝试使用Delphi 6...我颤抖着。
我在书架上还有几张这样的磁盘......:)))对不起,我不在上面


那么,function()的括号内是什么,是向它传递一些参数的某种 "形式 "吗?


因为我的脑子里不知道为什么,认为它是函数处理后返回的 一个 参数。还有就是函数得到的参数要在大括号内处理...{}。

void TrPos() {
if (OrderType()==OP_BUY) {
    if ( (Bid-OrderOpenPrice())>TrailingStop*Point) {
      if (OrderStopLoss()<Bid-TrailingStop*Point) {
        ModifyStopLoss(Bid-TrailingStop*Point);
        return;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

也就是说,所有这些Bid、Point 等都是输入参数。

我一定是大错特错了......。而大括号()内的内容允许向一个函数传递参数,
,而函数本身可以位于脚本适当代码的任何(或其他)地方......

对吗?

 
问题是,为什么与OpenPosition不同,ModifyOrder中没有错误处理?在修改过程中也有各种各样的错误。我想为安装、修改和关闭设置单独的函数,并为所有的错误处理单元设置单独的错误处理单元--代码更少,更容易编写,而且工作更快......如果我说错了,请纠正我...
 
日安,伊戈尔!我在使用你的专家顾问和脚本时有问题,在真实的(Alpari DC)上使用任何形式的拖网。我尤其对e-News-Lucky$(我的系统的理想选择)、e-TFL_v2、Set2StopOrders、e-SotTrailing感兴趣。它在演示中工作(也是Alpari)。没有错误信息。它可能是什么?还有一个问题。如何关闭e-News-Lucky$的时间绑定,以便随时进入和退出?谢谢你!
 
ag-forex писал (а):
日安,伊戈尔!我在我的真实账户(Alpari DC)上使用你的EA和脚本时遇到了任何形式的拖网问题。我尤其对e-News-Lucky$(我的系统的理想选择)、e-TFL_v2、Set2StopOrders、e-SotTrailing感兴趣。它在演示中工作(也是Alpari)。没有错误信息。会是什么呢?
通过联系这家经纪公司的技术支持,这个问题已经解决了很多次。
 
kombat писал (а):
那么,function()括号内 内容是一种 "表格",用于传递一些参数?

是的......有点像一个容器 :-)

kombat 写道(a):
,因为某些原因,我脑子里的想法是相反的:这是 函数处理后返回的 参数。

该函数返回的是返回值。下面是一个简单的例子。我们定义一个函数,将两个数字相加。

int f(int a, int b) {
  int x;
  x=a+b;
  return(x);
}

现在,如果我们像这样调用这个函数。

int y;
y=f(3, 5);

那么数字3和5就是函数f的参数。函数的参数可以是数字、变量或表达式。变量a和b是局部变量,它们接受参数的值并将其交给函数。变量x是函数f的返回值,也就是说,在我们调用函数f后,变量y将获得变量x传递给它的值,即8。

Kombat:

还有一个事实是,该函数接收的参数要在大括号内处理...{}。

void TrPos() {
if (OrderType()==OP_BUY) {
    if ( (Bid-OrderOpenPrice())>TrailingStop*Point) {
      if (OrderStopLoss()<Bid-TrailingStop*Point) {
        ModifyStopLoss(Bid-TrailingStop*Point);
        return;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

也就是说,所有这些Bid、Point等都是输入参数。

不...ModifyStopLoss函数的参数将是Bid-TrailingStop*Point表达式的值。

Kombat:

我一定是犯了一个疯狂的错误...。而括号()中的内容允许传递参数以在函数中进行处理,
,函数本身可以位于脚本代码本身的任何(或其他)地方......

对吗?

 
sasa999:
问题是,为什么与OpenPosition不同,ModifyOrder没有错误处理?

我在某处听到有人说,道路的规则是用血写成的。而且其中没有任何多余的东西。每个字的背后几乎都有一个在事故中失去的生命。

我根据自己的经验,写出了我的函数,并包括对实践中出现的错误的处理,而且没有办法避免。在试图进入市场 时,我尽量做到 "有礼"(错误处理)。在修改过程中,通过价格的标准化和简单的数值检查,大部分错误都被消除了。如果在修改过程中发生了一些错误,在下一次打勾时就可以了。同样的情况也发生在关闭时。

 

向这个函数发送pp--订单的开盘价的目的是什么?

void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE)

就像颜色在开始时就已经设定好了......。test_ModifyOrder.mq4(12.14 KB) ......你为什么不使用它,而是将它重新发送到函数中

color clModifyBuy = Aqua; // Цвет значка модификации покупки
color clModifySell = Tomato; // Цвет значка модификации продажи
有何好处
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
pp=NormalizeDouble(pp, dg);

简称前

pp=NormalizeDouble(pp, Digits);

为什么要对OrderOpenPrice() 进行规范化处理?它的格式不是和订单中一样吗?

op=NormalizeDouble(OrderOpenPrice() , dg);
到目前为止,如果修改时插入同样的东西,我还没有注意到任何错误。OrderStopLoss()和OrderTakeProfit()也是如此。
 
sasa999:

向这个函数发送pp--订单的开盘价的目的是什么?

void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE)

订单 OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT 和 OP_SELSTOP 将被移动。

sasa999:

颜色也算是在最开始就已经确定了......test_ModifyOrder.mq4(12.14 KB) ...为什么不使用它,而要重新发送至函数

color clModifyBuy = Aqua; // Цвет значка модификации покупки
color clModifySell = Tomato; // Цвет значка модификации продажи

谢谢你!我将使用它!

sasa999:
优势何在
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
pp=NormalizeDouble(pp, dg);

简称为 "简表"。

pp=NormalizeDouble(pp, Digits);

多功能性,使EA不仅可以处理当前符号的头寸和订单,还可以处理其他符号的头寸和订单。例如,该EA在欧元兑美元图表上工作。带有数字的变体将不允许与在USDJPY上建立的头寸一起工作。

sasa999:

为什么OrderOpenPrice()需要被规范化?

op=NormalizeDouble(OrderOpenPrice() , dg);

这是为了成功地比较双倍 类型的值。如果没有规范化,比较就不可能或相当没有意义。

sasa999:
如果你在修改时把相同的东西放回去,并没有发现错误。 OrderStopLoss()和OrderTakeProfit()也是如此。
如果没有规范化,该函数会产生错误1(OrderModify 试图用相同的值来改变已经设定的值)。