任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 351

 
请帮助我解决这个函数中的错误。它已经榨干了我身上所有的汁液。该函数的实质是,当达到一定利润时,该函数应关闭一半的订单。
void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}

哦,我怎样才能使这个功能在每个未平仓的订单上只工作一次?
 
Trader7777:
请帮助我解决这个函数中的错误。它已经榨干了我身上所有的汁液。该函数的实质是,当达到一定利润时,该函数应关闭一半的订单。
哦,我怎样才能使这个功能在每个未平仓的订单中只工作一次?
你可以在这里 找到部分关闭的原则。
 
Trader7777:
请帮助我解决这个函数中的错误。它已经榨干了我身上所有的汁液。该函数的实质是,当达到一定利润时,该函数应关闭一半的订单。

void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....

if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете....
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}

}


}

哦,我怎样才能使这个功能在每个未平仓的订单上只工作一次?
 
TarasBY:
你可以在这里 看到部分关闭订单的原则。

谢谢你。但我仍然希望首先了解自己的错误。我还在学习。此外,我认为我已经非常接近事实了。

 

再来一次...该功能不工作。我想了解这些错误。+ 如何使它只对一个未平仓的订单触发1次?非常感谢你的帮助)

extern int TP         = 200; // это количество пунктов после которых должно произойти частичное закрытие
extern int Magic      = 77;


void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
  {
    if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
      {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
          {
            if (OrderType() == OP_BUY) 
            double Lots = OrderLots(); 
            double HalfLot  = NormalizeDouble (Lots*0.5,2); // изначально ( при открытии ордера) лот рассчитывается так, что он не может быть меньше чем 0,02
            OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
          
            if (OrderType() == OP_SELL)
            double Lots1 = OrderLots(); 
            double HalfLot1  = NormalizeDouble (Lots*0.5,2);
            OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
          }
        }
      }
    }
 
Trader7777:

再来一次...该功能不工作。我想了解这些错误。+ 如何使它只对一个未平仓的订单触发1次?


一旦下单的条件不是很明确。好吧,我们可能不得不在这里使用全局变量。也许有不止一个订单,而且每个订单只有一次?
 
Trader7777:

再来一次...该功能不工作。我想了解这些错误。+ 如何使它只对一个未平仓的订单触发1次?

按批次大小过滤
 

我有以下情况。EA中有几个模块,每个模块都需要几个自定义函数。为了不淹没在代码中,我决定把每个模块放到脚本中。下面是 在专家顾问中调用脚本的变体。然而,下一个问题出现了:在调用脚本时,我需要向它传递一些参数。我们可以使用全局变量。还可以提出哪些其他的变体?

让我马上告诉你:通过iCustom()的 "更简单 "的变体并不适合我,原因有二。首先,模块的调用应该是在内存中偶尔出现的,而不是常量。第二,我不使用指标数组。

 
Sepulca:

一旦下单的条件不是很明确。那么你可能必须在这里使用全局变量。是否可以有多个订单,每个订单只有一个时间?

市场上只能有一个订单。目前,这个功能完全不起作用......由于某种原因。但如果它能正常工作,我理解它将一直被触发,只要利润高于设定的点数。当然,我们需要它来关闭一次一半的头寸,仅此而已。但我希望它至少能工作一次)。
 
gyfto:

我有以下情况。EA中有几个模块,每个模块都需要几个自定义函数。为了不淹没在代码中,我决定把每个模块放到脚本中。下面是 在专家顾问中调用脚本的变体。然而,下一个问题出现了:在调用脚本时,我需要向它传递一些参数。我们可以使用全局变量。还可以提出哪些其他 的变体?

让我马上告诉你:通过iCustom()的 "更简单 "的变体并不适合我,原因有二。首先,模块的调用应该是在内存中偶尔出现的,而不是常量。第二,我不使用指标数组。


图书馆是一个选择。