初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1096

 
EgorKim:

我有A和B点的时间和价格

我怎么知道C点的时间和价格? 它在A和B的中间。

我无法在任何地方找到一个例子


//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
 
EgorKim:

我有A和B点的时间和价格

我怎么知道C点的时间和价格? 它在A和B的中间。

我在任何地方都找不到一个例子。


时间C = 时间B - ((时间B - 时间A) / 2)

C时间的价格

 
Сергей Таболин:

时间C = 时间B - ((时间B - 时间A) / 2)

价格按时间C

检查了一下,有时我得到一个周末)

有什么方法可以找出线路本身的中心吗?

下面是我的台词

void SetLow(double price_1,double price_2,datetime time_1,datetime time_2)
  {
   ObjectCreate(0,"Low",OBJ_TREND,0,time_2,price_2,time_1,price_1);
   ObjectSetInteger(0,"Low",OBJPROP_COLOR,clrAqua);
   ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
   ObjectSetInteger(0,"Low",OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,"Low",OBJPROP_BACK,false);
   ObjectSetInteger(0,"Low",OBJPROP_RAY_RIGHT,true);
  }
 
Igor Makanu:

你怎么知道最后一个订单的票据?

你到底想知道什么?我们需要清楚地区分ORDER、ORDER和POSITION这三个术语。

第二:你将CTrade类的对象命名为 "order_1" " "order_2",立即引起了混乱。 他们习惯于将CTrade类对象称为 "m_trade_1 "和 "m_trade_2"。这并不影响可用性,但却增加了很多混乱的地方。

第三:PositionClose 方法不会工作,只是因为你传递给它的位置票等于零(你在OnInit()中以零初始化它们)。- 这样的理想条件,当第一个位置有票 "0 "时,只能在测试器中获得。

第四:购买

注意事项

买入(...)方法的成功完成并不总是意味着交易操作的成功。人们应该通过调用ResultRetcode() 方法检查交易请求的结果(交易服务器的返回代码)以及ResultDeal()方法返回的值


ResultDeal()方法

获取READ票据。

 
Vladimir Karputov:

你到底想知道什么?你需要清楚地区分ORDER、ORDER和POSITION三个术语。

第二,你用 "order_1 "和 "order_2 "来命名CTrade类的对象,立即造成了混乱。 他们习惯于将CTrade类对象称为 "m_trade_1 "和 "m_trade_2"。这并不影响可用性,但却增加了很多混乱的地方。

第三:PositionClose 方法不会工作,只是因为你传递给它的位置票等于零(你在OnInit()中以零初始化它们)。- 这样的理想条件,当第一个位置有票 "0 "时,只能在测试器中获得。

第四:购买

注意事项

买入(...)方法的成功完成并不总是意味着交易操作的成功。人们应该通过调用ResultRetcode() 方法检查交易请求的结果(交易服务器的返回代码)以及ResultDeal()方法返回的值


ResultDeal()方法

获取RECEIVED票据。

谢谢你!已经猜到了

总的来说,问题是来自于大量的信息、流言和机会....。我确信我无法在Result()中抓到一张票,因为OnTradeTransaction()事件每隔一段时间就会被记住 ...并开始了!

我目前正在使用MT5测试器进行工作,我只是在寻找可复制的例子,我不是在谈论功能代码--目前只是一个测试器。

再次感谢您的帮助!

这个代码可以获得测试器中最后一个订单的门票。

//+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"

input double Lot_1 = 0.10;
input double Lot_2 = 0.20;
input ulong  Magic1 = 12345;
input ulong  Magic2 = 67890;
#include<Trade\Trade.mqh>
 CTrade order_1,order_2;
ulong   ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private:
   datetime          mnewtime;
   ENUM_TIMEFRAMES   mperiod;
public:
                     CNewbar()                        { mperiod=PERIOD_CURRENT;  mnewtime=TimeCurrent(); }
                     CNewbar(ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime=TimeCurrent(); }
   bool              NewBar(){ datetime t=iTime(NULL,mperiod,0); if(mnewtime<t){ mnewtime=t; return(true); } return(false);  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1(PERIOD_H1);
CNewbar Bar_M30(PERIOD_M30);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0;
   ticket_2 = 0;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
      if(order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print("NewBar H1, ticket_1 = ",ticket_1);
        }
     }

   if(Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
      if(order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print("NewBar M30, ticket_2 = ",ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

谢谢你!已经想明白了。

总的来说,问题是来自于大量的信息、流言和可能性....。我确信我不能在Result()中抓到票,因为OnTradeTransaction()事件每隔一段时间就会被记住......并开始了!

我目前正在使用MT5测试器进行工作,我只是在寻找可复制的例子,我不是在谈论功能代码--目前只是一个测试器。

再次感谢您的帮助!

这样的代码可以在测试器中获得最后一个订单的刻度线。

是的,使用ResultOrder将获得订单票

 
Vladimir Karputov:

是的,通过ResultOrder我们可以得到一张订单的票据

好吧,现在我没有任何问题,但在使用 CTrade 时出现了另一个问题:我有一个记忆中的订单票,我可以使用 PositionClose(m_ticket) 关闭它。

在MQL4中,很容易发现订单是否被关闭。 我使用OrderSelect()选择它,并检查if(OrderCloseTime()>0) - 如果关闭时间不等于0,订单被关闭。

我如何知道使用SB CTrade的订单是否被关闭?

 
Igor Makanu:

好吧,现在我没有任何问题,但在使用 CTrade 时出现了另一个问题:我有一个记忆中的订单票,我可以使用 PositionClose(m_ticket) 关闭它。

在MQL4中,很容易发现订单是否被关闭。 我使用OrderSelect()选择它,并检查if(OrderCloseTime()>0) - 如果关闭时间不等于0,订单被关闭。

我如何知道使用SB CTrade的订单已经关闭?

忘了顺序吧!有一个位置!

我特别问你想要什么:一个命令、一个取舍或一个位置?不要混淆术语。在交易指令 被执行后,出现的是位置,而不是订单!


因此,首先用语言描述你在做什么,你想获得什么。用 "买入交易订单 "和 "卖出交易订单 "代替订单。这导致了 "买入 "或 "卖出 "头寸。

 
Igor Makanu:

好吧,现在我没有任何问题,但在使用 CTrade 时出现了另一个问题:我有一个记忆中的订单票,我可以使用 PositionClose(m_ticket) 关闭它。

在MQL4中,很容易发现订单是否被关闭。 我使用OrderSelect()选择它,并检查if(OrderCloseTime()>0) - 如果关闭时间不等于0,订单被关闭。

我如何知道使用SB CTrade的订单是否被关闭?

撇开仓位票通常 与订单票相对应的事实不谈,但也不是绝对的,可以使用PositionSelectByTicket函数 而不用SB

Документация по MQL5: Торговые функции / PositionSelectByTicket
Документация по MQL5: Торговые функции / PositionSelectByTicket
  • www.mql5.com
Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и...
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

我可以在这个指标计算 代码中替换我自己的计算公式 吗?

例如open/2