新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1028

 

为什么EA不能将挂单价格(卖出止损)改为更有利可图的价格?


下面是定义需要移动挂单的开盘价的函数

if(orders_total > 0 && position_total == 0)
     {
      OrderGetTicket(0)
      if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP)
        {
         if(OrderGetDouble(ORDER_PRICE_OPEN) - SymbolInfoDouble(_Symbol,SYMBOL_ASK) > ((double)(dist+1)) * _Point) Mode_Order("M",SymbolInfoDouble(_Symbol,SYMBOL_ASK) + ((double)dist * _Point));
        }
      else if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
        {
         if(SymbolInfoDouble(_Symbol,SYMBOL_BID) - OrderGetDouble(ORDER_PRICE_OPEN) > ((double)(dist+1)) * _Point) Mode_Order("M",SymbolInfoDouble(_Symbol,SYMBOL_BID) - ((double)dist * _Point));
        };
     };


...这是一个函数,它已经移动了挂单的开盘价。

void Mode_Order(string act, double price)
  {
   
   MqlTradeRequest request; ZeroMemory(request);
   MqlTradeResult  result;  ZeroMemory(result);
   
   request.symbol = _Symbol;
   
   if(act == "S")
     {
      request.action   = TRADE_ACTION_SLTP;
      request.position = PositionGetTicket(0);
      request.sl       = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ? PositionGetDouble(POSITION_PRICE_OPEN) - ((double)stop * _Point) : PositionGetDouble(POSITION_PRICE_OPEN) + ((double)stop * _Point));
      request.tp       = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ? PositionGetDouble(POSITION_PRICE_OPEN) + ((double)profit * _Point) : PositionGetDouble(POSITION_PRICE_OPEN) - ((double)profit * _Point));
     }
   else
     {
      request.action   = TRADE_ACTION_MODIFY;
      request.position = OrderGetTicket(0);
      request.price    = NormalizeDouble(price,_Digits);
     };
   
   if(!OrderSend(request,result)) Print("Не удалось изменить параметры ордера. Код ошибки "+(string)result.retcode);
   
  }
 
Alexandr Sokolov:

为什么EA不能将挂单价格(卖出止损)改为更有利可图的价格?


下面是定义需要移动挂单的开盘价的函数


...这是一个已经移动挂单的开盘价的函数

这个订单是唯一的吗?SLTP的修改是否有效? 如果没有,则应将采取和停止的措施规范化。

dist1等于什么?这里应该设置订单而不是位置

request.position = OrderGetTicket(0);
 
Aleksey Mavrin:

秩序是唯一的吗?SLTP的修改是否有效? 如果没有,你应该将取材正常化并停止

dist1等于什么?我们应该设置顺序而不是位置

非常感谢您!我没有注意到这一点,这似乎是一件小事--但没有它就无法工作。


...该订单是唯一的一个,一切正常,唯一的问题是移动待定订单

 
Alexandr Sokolov:

非常感谢您!我没有注意到这一点,似乎是一件小事--但没有它就无法工作。


...该订单是唯一的一个, 一切正常, 唯一的问题是移动待定订单

1.请2.嗯,无论如何我都要把它正常化,反对罪恶。你的价格是由整数乘以一个归一化的双数得到的,在一般情况下,显然也是得到一个归一化的双数,但我在某个地方读到,并不总是这样,一年中可能有几次会得到

类似于1.132500000000000000000000001的东西

然后麻烦,在适当的时候,当最强大的趋势不起作用时,又是抵押贷款,你好))))。

我可能是错的,但我自己总是安抚和正常化。

 
Aleksey Mavrin:

1.请2.嗯,反正我是为了罪孽而正常化。你从一个整体中得到的价格乘以一个正常化的双倍,在一般情况下,显然你也会得到一个正常化的双倍,但我在某个地方读到,并不总是如此,一年中有几次你可能得到

类似于1.132500000000000000000000001的东西

然后麻烦,在适当的时候,当最强大的趋势不起作用时,又是抵押贷款,你好))))。

我可能是错的,但我自己总是安抚和正常化。

对两个归一化的数字 进行数学运算会得到非归一化的结果。

为了得到实数的数学运算的归一化结果,你必须返回这些数学运算的归一化值。

Norm(1.11111) + Norm(2.22222) = NoNorm(res)

Norm(1.11111 + 2.22222) = Norm(res)

 

@ Artyom Trishkin

我已经附上了这个主题的代码。

我在代码库中找到了它的代码。在修改代码时,出现了一个问题。

输入部分有以下条目。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input eTradeType                                    Inp_element_12357534       = TRADETYPE_BUY;                        // First Trade Type
input double                                        Inp_element_3632865        = 0.01;                                 // Start Lot
input double                                        Inp_element_12844407       = 1.0;                                  // Lot Multiplier
input #ifdef __MQL4__ int #else long #endif          Inp_element_2542795        = 400;                                  // Grid Step, points
input #ifdef __MQL4__ int #else long #endif          Inp_element_3135636        = 100;                                  // Target, points
input #ifdef __MQL4__ int #else long #endif          Inp_element_3634918        = 7373;                                 // Magic
sinput string                                       Inp_element_3640359        = "Grid EA";                            // Comment
//+------------------------------------------------------------------+

我想让这个参数在程序运行时发生变化: 输入 #ifdef__MQL4__ INT #else long #endif Inp_element_2542795 = 400 // 步进网格,点

请让我知道我可以做什么来改变每次运行时的这个参数。

附加的文件:
Manage.mq5  859 kb
 
jaffer wilson :

@ Artyom Trishkin

我已经附上了这个主题的代码。

我在代码库中找到了它的代码。在修改代码时,出现了一个问题。

输入部分有以下条目。

我想让这个参数在程序运行时发生变化: 输入 #ifdef__MQL4__ INT #else long #endif Inp_element_2542795 = 400 // 步进网格,点

请让我知道我可以做什么来改变每次运行时的这个参数。

说实话,这个问题并不清楚。

你想在每次启动顾问时改变输入参数Inp_element_2542795吗?

好吧,在启动时在顾问设置中改变它。或者,如果顾问已经在运行,而您想改变这个参数,那么按F7 - 顾问设置窗口将出现,并在其中改变这个参数。

 
Artyom Trishkin:

说实话,这个问题并不清楚。

你想在每次启动顾问时改变输入参数Inp_element_2542795吗?

好吧,在启动时在顾问设置中改变它。或者,如果顾问已经在运行,而您想改变这个参数,那么按F7 - 顾问设置窗口将出现,并在其中改变这个参数。

让我说清楚。我想问题在于翻译。实际上,它是输入值。我不明白这个值在哪里被用于计算。我不希望每次都要用400。我想继续改变价值。我想把这些值改成合适的计算。你能帮助我在哪里进行修改,以便在程序运行期间使数值变成动态的吗?

 
jaffer wilson :

让我把它弄清楚。我认为问题出在翻译上。它实际上是一个输入值。而我不明白这个值是用来计算的。我不希望每次都用400分。我想继续改变价值。我想为一个合适的计算而改变这些数值。你能帮助我在哪里进行修改,以便在程序运行时使数值变得动态吗?

创建一个新的全局变量将输入参数Inp_element_2542795值设为它

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
cRunner *Runner;
long g_element_2542795=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//===============
   g_element_2542795=Inp_element_2542795;
//===============
/* DEBUG MACROS' START */ TRACEERRORS_START
//===============
 
//===============
   Runner=new cRunner;
//===============
 

并使用 Ctrl + H 将字符串Inp_element_2542795 的整个条目替换为这个新变量g_element_2542795

 

你好!

我只是在学习MQL5,所以我请求帮助。

有一个班级--https://www.mql5.com/ru/code/18721(Vlad Karputova)。感谢弗拉基米尔。

它计算利润(以点数、存款货币、互换和佣金)。 但它没有Magik的过滤器。

我已经为Magik添加了过滤器(我不确定它是否正确,所以我不想把它和错误一起发布)。

得到了结果。

Search deals with POSITION_IDENTIFIER 53821539
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11164, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11170, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.18
Profit in points -6.0, commission -0.10, swap 0.00, profit -0.18

Search deals with POSITION_IDENTIFIER 53821617
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11159, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11172, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.39
Profit in points -13.0, commission -0.10, swap 0.00, profit -0.39

Search deals with POSITION_IDENTIFIER 53821750
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.11163, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11169, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.18
Profit in points -6.0, commission -0.10, swap 0.00, profit -0.18

Search deals with POSITION_IDENTIFIER 53847372
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10971, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.11002, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -0.93
Profit in points -31.0, commission -0.10, swap 0.00, profit -0.93

Search deals with POSITION_IDENTIFIER 53848455
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10997, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.10741, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit 7.68
Profit in points 256.0, commission -0.10, swap 0.00, profit 7.68

Search deals with POSITION_IDENTIFIER 53856130
DEAL_ENTRY_IN, DEAL_TYPE_SELL, price 1.10735, Deal_Symbol EURUSD, Deal_Magic  222, volume 0.03, commission -0.05, swap 0.00, profit 0.00
DEAL_ENTRY_OUT, DEAL_TYPE_BUY, price 1.10769, Deal_Symbol EURUSD, Deal_Magic  0, volume 0.03, commission -0.05, swap 0.00, profit -1.02
Profit in points -34.0, commission -0.10, swap 0.00, profit -1.02
All_Profit in points 166.0, All_commission -0.60, All_swap 0.00, All_profit 4.98
All_Profit in points 0.0, All_commission 0.00, All_swap 0.00, All_profit 0.00

原始班级和用Magik过滤的班级的结果是一致的。但是,这里有一点。

1.为什么OUT交易的魔力为零。

2.如果我错误地纠正了这个班级(增加了一个魔力)--请对原班级进行必要的修改并张贴。

(而把一个符号作为参数传给类就好了)。

谢谢你的帮助。

HistoryPositionInfo version 2
HistoryPositionInfo version 2
  • www.mql5.com
Новое в версии 2: функция GetProfitInPoints осталась, но рекомендуется теперь использовать новую функцию GetProfit: Функция GetProfit возвращает для восстановленной позиции, кроме прибыли в пунктах: комиссию, своп и прибыль в деньгах. Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в...
原因: