[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 627

 
rigonich:
你首先做sl = 0; tp = 0; 然后if(sl != 0 || tp != 0)。


维塔利,这里的意思很清楚。看。

void OrdersModifying(double& sl, double& tp)
{
  int total = OrdersTotal() - 1;
  sl = 0; tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

一开始sl =0; tp =0; 然后我根据用户输入的i_sl和 i_tp,找到已经在订单中的sltp 的归一化值。然后我检查sltp 是否不等于零,也就是说,在我在函数开始时声明它们之后,它们已经发生了变化,然后我们修改命令。

而如果sltp 等于零,就意味着这些参数没有被计算出来......按照我的理解。一旦我获得这些变量的值,它们将立即变成非零,我们可以修改顺序......这有意义吗?

 
hoz:


维塔利,这里的意思很清楚。见。

一开始sl =0; tp =0; 然后我根据用户输入的i_sl和 i_tp,找到sltp 的归一化值,这些值已经在顺序上了。然后我检查sltp 是否不等于零,也就是说,在我在函数开始时声明它们之后,它们已经发生了变化,然后我们修改命令。

而如果sltp 等于零,就意味着这些参数没有被计算出来......按照我的理解。一旦我获得这些变量的值,它们将立即变成非零,我们可以修改顺序......这有意义吗?



对不起,我没有看到什么,没有眼镜,也没有颜色,但为什么要向这个函数传递参数,而且还是通过引用来传递?如果i_sl,g_type...是全局变量,它将在没有参数的情况下工作,如果你需要改变它们(修改后的变量),在修改后的同一个函数中进行。
 
rigonich:

对不起,我没有看到什么,我没有戴眼镜或任何颜色,但为什么我们要向这个函数传递参数,而且还是通过引用传递?如果i_sl,g_type...是全局变量,它将在没有参数的情况下工作,如果你需要改变它们(修改后的变量),在修改后的同一个函数中进行。


订单由OpenBuy()OpenSell()函数发送,但OrdersModifying()函数会修改订单

例如,如果修改功能被放在Trade 函数(int signal)OpenBuy()OpenSell() 中,那么OrdersModifying() 函数中获得的sltp 值无论如何都应该被传递到那里该函数中缺少这些值。

 
hoz:


订单由函数OpenBuy()OpenSell()发送,但它们由函数OrdersModifying()修改

例如,如果修改功能被放在Trade 函数(int signal)OpenBuy()OpenSell() 中,那么OrdersModifying() 函数中获得的sltp 值应该被传递到那里。该函数中缺少这些值。


在你的案例中, 函数OpenBuy()OpenSell() 在没有std的情况下下单,然后,如果下单了,就用函数OrdersModifying() 修改我不认为有必要在其他地方放置OrdersModifying() 函数并向其传递任何参数。你只需要 在这个函数中声明sl和tp变量。int sl = 0, tp = 0。

对不起,不是int,是double。

 
rigonich:

你的OpenBuy()OpenSell() 函数在没有sl等的情况下下单,然后,如果下单了,就用OrdersModifying() 函数修改我不认为有必要在其他地方放置OrdersModifying() 函数并向其传递任何参数。你只需要 在这个函数中声明sl和tp变量。int sl = 0, tp = 0。


目前,我有这样一个交易功能。

bool Trade (int signal)
{
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
  
  if(OrderStopLoss() == 0 && OrderTakeProfit() == 0)
    OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    
  if(UseBU == true)
     MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

修改不发生。

 
hoz:


目前,我有这样一个交易功能。

修改不发生。


你有一个订单没有在Trade()函数中选择。
 
rigonich:

我不明白你想从剧本中得到什么。


你需要一个程序,当在档案图表中启动时,该程序

价格运动部分将在运动的强度和时间方面用指定的参数进行直观的标记。

例如--在30分钟内完成400分的修正。 因此在整个一年中,所有的修正都在这个范围内。

不可能用肉眼来观察它们。歪曲。我希望能有彩色编码,以便能立即看到它们。

___

我看过了,有不同的 "Histoty "程序。 但他们只是将账户历史可视化。

但我没有发现按我所指定的过滤器的价格段。

 
rigonich:

你在交易()函数中没有选择订单。


有这样一件事。这里是修复。

bool Trade (int signal)
{
  int total = OrdersTotal() - 1;
  
  FindOrders();

  if(signal == SIGNAL_BUY)                                                          // Если сигнал на покупку и открытых ордеров нет..
    if(!OpenBuy())                                                                  // открываем лимитный ордер на покупку
      return(false);                                                                
      
  if(signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if(!OpenSell())
       return(false);                                                              // открываем лимитный ордер на продажу
       
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

  return(true);
}

而修改功能是这样的。

void OrdersModifying()
{
  int total = OrdersTotal() - 1;
  double sl = 0, tp = 0;
  
  for(int i=total; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)                            // Если ордер есть и он выбран..
    {
      if(g_type == OP_BUY)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt,Digits);                    // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,Digits);                    // Получаем значение тейкпрофита для выбранного ордера
      }
      if(g_type == OP_SELL)
      {
        if(i_sl != 0)                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,Digits);                // Получаем значение стоп-лосса для выбранного ордера
        if(i_tp != 0)                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,Digits);                // Получаем значение тейкпрофита для выбранного ордера
      }
      if(sl != 0 || tp != 0)                                                            // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,Lime);      // Модифицируем ордер
      }
    }
  }
}

奇怪的是,在输出上又没有任何停顿和取舍。

 
TUNGUS:


我们需要一个程序,当在档案图表中启动时

价格运动部分将在运动的强度和时间方面用指定的参数进行直观的标记。

例如--在30分钟内完成400分的修正。 因此在整个一年中,所有的修正都在这个范围内。

不可能用肉眼来观察它们。歪曲。我希望能有彩色编码,以便能立即看到它们。

___

我看过了,有不同的 "Histoty "程序。 但他们只是将账户历史可视化。

但我还没有按我设定的过滤器找到价格的段位。


History, History_Draw - 它们在测试中像专家顾问一样工作。

我需要这样的东西,通过给定的参数来观察历史中的修正。

 

MT4的Symbol() 问题。

2个功能来说明。

string   SymbolOK()
{

   string   value;
   string   argument = "ANYTHING";

   if(false)
   {
      value = argument;
   }

   return(value);

}

string   SymbolPROBLEM()
{

   string   value;
   string   argument = Symbol();

   if(false)
   {
      value = argument;
   }

   return(value);

}

执行第一个命令会输出一个空字符串。

int start()
{
   Comment(SymbolOK());
   return(0);
}

但第二个函数输出一个字符串ID "EURUSD"(嗯,取决于图表,但输出,尽管根据函数的逻辑,它应该是一个空字符串)。

int start()
{
   Comment(SymbolPROBLEM());
   return(0);
}

帮助我了解什么是错的?谢谢你