初学者的问题 MQL5 MT5 MetaTrader 5 - 页 762 1...755756757758759760761762763764765766767768769...1503 新评论 Alexey Viktorov 2017.07.20 07:10 #7611 Alexey Kozitsyn: 而且需要检查的不是头寸或交易,而是订单,因为先有订单,后有交易,再有头寸。为什么只有订单?交易不是有一个位置标识(门票)吗? 交易_职位_ID [删除] 2017.07.20 07:31 #7612 Alexey Viktorov:为什么只有订单?交易不是有一个位置标识(门票)吗? 交易_职位_ID是的,你是对的。订单和交易都有一个位置标识符。然而,在一般情况下,我们应该知道,该位置被分配了一个启动交易的第一顺序的标识符。因此,启动头寸的 "实体 "是订单,而不是交易。而且,应该搜索的是订单,而不是交易。来自文件。职位标识符是一个唯一的数字,分配给每个新开的职位,在整个生命周期内不会改变。它与开仓时的订单票相对应。仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。 Alexey Viktorov 2017.07.20 08:48 #7613 Alexey Kozitsyn:是的,你是对的。订单和交易都有一个位置标识符。然而,一般来说,你应该知道,该头寸被分配给发起交易的第一个订单的标识符。因此,启动头寸的 "实体 "是订单,而不是交易。而且,应该搜索的是订单,而不是交易。来自文件。我不打算争论,这正是文件中所说的。但在同一文件的其他地方,它说"作为一项规则......",这意味着可能有不一致的地方。而这是我曾经遇到的 "作为一个规则"...位置的职位票。当一个职位 被改变和关闭 时,它应该被填入,以便其独特的识别。通常情况下,它与订单的票据相对应,因为它是开仓的结果。 我不记得了,而且我不太可能理解它,读了它,做了修改,然后忘记了。从那时起,我变得更加关注它。 Ivan Ivanov 2017.07.20 10:00 #7614 Vitaly Muzichenko: 请告知如何取回用于交易的票据。在截图上,它是 "63214735"。在这里,你要找的是交易列表中的位置编号,否则就是错误的。 下面是一个演示 HistorySelectByPosition 所 带来的脚本 //--- input parameters input int Position; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { ulong Ticket; if ( HistorySelectByPosition(Position) ) { Print("Position = "+IntegerToString(Position)); int o=HistoryOrdersTotal()-1; while ( o>=0 ) { Ticket=HistoryOrderGetTicket(o); Print("Order "+IntegerToString(o)+" = "+IntegerToString(Ticket)); o--; } int d=HistoryDealsTotal()-1; while ( d>=0 ) { Ticket=HistoryDealGetTicket(d); Print("Deal "+IntegerToString(d)+" = "+IntegerToString(Ticket)); d--; } } }这就是结果的样子。Position = 65328142 Order 1 = 65347809 Order 0 = 65328142 Deal 1 = 4070777 Deal 0 = 4051254 0 = 打开位置1 = 关闭位置如果你没有得到它=你没有进入门票位置如果你从 "交易票 "开始,也可以得到同样的结果。对于HistoryDealGetInteger()函数 enum_deal_property_integer 识别器 描述 类型 折扣_TICKET 交易票。将分配给每个交易的唯一号码 长 购货订单 订单,交易是在此基础上执行的 长 折扣时间(DEAL_TIME 交易执行时间 日期时间 机会 从1970年1月1日开始的交易执行时间,单位为毫秒 长 种类:Deal_TYPE 交易类型 ENUM_DEAL_TYPE 帐户 交易方向--市场进入、市场退出或反转 enum_deal_entry 淘宝网 交易的神奇数字(见 ORDER_MAGIC)。 长 交易理由 交易的原因或来源 enum_deal_reason 交易_职位_ID 该交易所涉及的开仓、修改或平仓的标识符。 每个头寸都有一个独特的标识符,它被分配给该头寸有效期内的所有交易。 长 Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Vitaly Muzichenko 2017.07.20 10:53 #7615 Ivan Ivanov: 谢谢你! 我需要这个:HistoryOrderGetTicket Artyom Trishkin 2017.07.20 11:24 #7616 Vitaly Muzichenko:谢谢你! 我需要这个:HistoryOrderGetTicket该订单可以是1.0手。但它可能会被部分执行,例如0.9手 - 剩余部分将被拒绝(取决于执行模式)。当你开始搜索订单上的手数时,就会出现不一致的情况。 Aleksey Vyazmikin 2017.07.21 01:24 #7617 请帮助--我需要一些合理的代码来获得OHLC环境值--现有的代码非常慢。选项1//------------------------------------------------------------------- //==MQL4toMQL5 //+------------------------------------------------------------------+ //| Получим Open для заданного номера бара | //+------------------------------------------------------------------+ double Open(int index) { double open=0; ArraySetAsSeries(Open,true); int copied=CopyOpen(Symbol(),0,0,Bars(Symbol(),0),Open); if(copied>0 && index<copied) open=Open[index]; return(open); } //+------------------------------------------------------------------+ //| Получим Low для заданного номера бара | //+------------------------------------------------------------------+ double Low(int index) { double low=0; ArraySetAsSeries(Low,true); int copied=CopyLow(Symbol(),0,0,Bars(Symbol(),0),Low); if(copied>0 && index<copied) low=Low[index]; return(low); } //+------------------------------------------------------------------+ //| Получим High для заданного номера бара | //+------------------------------------------------------------------+ double High(int index) { double high=0; ArraySetAsSeries(High,true); int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),High); if(copied>0 && index<copied) high=High[index]; return(high); } //+------------------------------------------------------------------+ //| Получим Close для заданного номера бара | //+------------------------------------------------------------------+ double Close(int index) { double close=0; ArraySetAsSeries(Close,true); // int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),Close); int copied=CopyClose(Symbol(),0,0,Bars(Symbol(),0),Close); if(copied>0 && index<copied) close=Close[index]; return(close); } //+------------------------------------------------------------------+ //| Получим IOpen для заданного номера бара | //+------------------------------------------------------------------+ double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double open=0; ArraySetAsSeries(OpenI,true); int copied=CopyOpen(symbol,timeframe,0,Bars(symbol,timeframe),OpenI); if(copied>0 && index<copied) open=OpenI[index]; return(open); } //+------------------------------------------------------------------+ //| Получим iLow для заданного номера бара | //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; ArraySetAsSeries(LowI,true); int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),LowI); if(copied>0 && index<copied) low=LowI[index]; return(low); } //+------------------------------------------------------------------+ //| Получим iHigh для заданного номера бара | //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; ArraySetAsSeries(HighI,true); int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),HighI); if(copied>0 && index<copied) high=HighI[index]; return(high); } //+------------------------------------------------------------------+ //| Получим iClose для заданного номера бара | //+------------------------------------------------------------------+ double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double close=0; ArraySetAsSeries(CloseI,true); int copied=CopyClose(symbol,timeframe,0,Bars(symbol,timeframe),CloseI); if(copied>0 && index<copied) close=CloseI[index]; return(close); }选项2 //------------------------------------------------------------------- //==MQL4toMQL5 //+------------------------------------------------------------------+ //| Получим Open для заданного номера бара | //+------------------------------------------------------------------+ double Open(int index) { double open=0; int copied=CopyOpen(Symbol(),0,index,1,Open); if(copied>0) open=Open[0]; return(open); } //+------------------------------------------------------------------+ //| Получим Low для заданного номера бара | //+------------------------------------------------------------------+ double Low(int index) { double low=0; int copied=CopyLow(Symbol(),0,index,1,Low); if(copied>0) low=Low[0]; return(low); } //+------------------------------------------------------------------+ //| Получим High для заданного номера бара | //+------------------------------------------------------------------+ double High(int index) { double high=0; int copied=CopyHigh(Symbol(),0,index,1,High); if(copied>0) high=High[0]; return(high); } //+------------------------------------------------------------------+ //| Получим Close для заданного номера бара | //+------------------------------------------------------------------+ double Close(int index) { double close=0; int copied=CopyClose(Symbol(),0,index,1,Close); if(copied>0) close=Close[0]; return(close); } //+------------------------------------------------------------------+ //| Получим IOpen для заданного номера бара | //+------------------------------------------------------------------+ double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double open=0; int copied=CopyOpen(symbol,timeframe,index,1,OpenI); if(copied>0) open=OpenI[0]; return(open); } //+------------------------------------------------------------------+ //| Получим iLow для заданного номера бара | //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; int copied=CopyLow(symbol,timeframe,index,1,LowI); if(copied>0) low=LowI[0]; return(low); } //+------------------------------------------------------------------+ //| Получим iHigh для заданного номера бара | //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; int copied=CopyHigh(symbol,timeframe,index,1,HighI); if(copied>0) high=HighI[0]; return(high); } //+------------------------------------------------------------------+ //| Получим iClose для заданного номера бара | //+------------------------------------------------------------------+ double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double close=0; int copied=CopyClose(symbol,timeframe,index,1,CloseI); if(copied>0) close=CloseI[0]; return(close); } Vitaly Muzichenko 2017.07.21 01:33 #7618 Aleksey Vyazmikin:请帮助--我需要一些合理的代码来获取OHLC环境值--现有的代码非常慢。选项1选项2 发布一个代码片段,展示你如何应用它。 Aleksey Vyazmikin 2017.07.21 01:39 #7619 Vitaly Muzichenko: 发布一段你如何应用它们的代码我不知道哪一块的速度变慢了--我以不同的方式应用它们,包括在循环中... 这里有一个例子 for(int X=1;X<DonchianBarStart+1;X++) { PricePeresek=Donchianf(0,X+1); if((Low(X)>PricePeresek && High(X)>PricePeresek) || (Low(X)<PricePeresek && High(X)<PricePeresek)) calcBarPeresek++; else break; } Vitaly Muzichenko 2017.07.21 01:56 #7620 Aleksey Vyazmikin:我不知道哪一块的速度慢了--我以不同的方式应用它,包括在循环中...在循环中似乎是这样的,你可以不使用函数 double LOW[1],HIGH[1]; for(int X=1;X<DonchianBarStart+1;X++) { PricePeresek=Donchianf(0,X+1); CopyLow(Symbol(),PERIOD_CURRENT,X,1,LOW); CopyHigh(Symbol(),PERIOD_CURRENT,X,1,HIGH); if((LOW[0]>PricePeresek && HIGH[0]>PricePeresek) || (LOW[0]<PricePeresek && HIGH[0]<PricePeresek)) calcBarPeresek++; else break; } 1...755756757758759760761762763764765766767768769...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
而且需要检查的不是头寸或交易,而是订单,因为先有订单,后有交易,再有头寸。
为什么只有订单?交易不是有一个位置标识(门票)吗?
交易_职位_ID
为什么只有订单?交易不是有一个位置标识(门票)吗?
交易_职位_ID
是的,你是对的。订单和交易都有一个位置标识符。然而,在一般情况下,我们应该知道,该位置被分配了一个启动交易的第一顺序的标识符。因此,启动头寸的 "实体 "是订单,而不是交易。而且,应该搜索的是订单,而不是交易。
来自文件。
职位标识符是一个唯一的数字,分配给每个新开的职位,在整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
是的,你是对的。订单和交易都有一个位置标识符。然而,一般来说,你应该知道,该头寸被分配给发起交易的第一个订单的标识符。因此,启动头寸的 "实体 "是订单,而不是交易。而且,应该搜索的是订单,而不是交易。
来自文件。
我不打算争论,这正是文件中所说的。但在同一文件的其他地方,它说"作为一项规则......",这意味着可能有不一致的地方。而这是我曾经遇到的 "作为一个规则"...
位置
的职位票。当一个职位 被改变和关闭 时,它应该被填入,以便其独特的识别。通常情况下,它与订单的票据相对应,因为它是开仓的结果。
请告知如何取回用于交易的票据。在截图上,它是 "63214735"。
在这里,你要找的是交易列表中的位置编号,否则就是错误的。
下面是一个演示 HistorySelectByPosition 所 带来的脚本
这就是结果的样子。
0 = 打开位置
1 = 关闭位置
如果你没有得到它=你没有进入门票位置
如果你从 "交易票 "开始,也可以得到同样的结果。
对于HistoryDealGetInteger()函数
enum_deal_property_integer
识别器
描述
类型
折扣_TICKET
交易票。将分配给每个交易的唯一号码
长
购货订单
订单,交易是在此基础上执行的
长
折扣时间(DEAL_TIME
交易执行时间
日期时间
机会
从1970年1月1日开始的交易执行时间,单位为毫秒
长
种类:Deal_TYPE
交易类型
ENUM_DEAL_TYPE
帐户
交易方向--市场进入、市场退出或反转
enum_deal_entry
淘宝网
交易的神奇数字(见 ORDER_MAGIC)。
长
交易理由
交易的原因或来源
enum_deal_reason
交易_职位_ID
该交易所涉及的开仓、修改或平仓的标识符。 每个头寸都有一个独特的标识符,它被分配给该头寸有效期内的所有交易。
长
谢谢你!
我需要这个:HistoryOrderGetTicket
谢谢你!
我需要这个:HistoryOrderGetTicket
该订单可以是1.0手。但它可能会被部分执行,例如0.9手 - 剩余部分将被拒绝(取决于执行模式)。当你开始搜索订单上的手数时,就会出现不一致的情况。
请帮助--我需要一些合理的代码来获得OHLC环境值--现有的代码非常慢。
选项1
选项2
请帮助--我需要一些合理的代码来获取OHLC环境值--现有的代码非常慢。
选项1
选项2
发布一段你如何应用它们的代码
我不知道哪一块的速度变慢了--我以不同的方式应用它们,包括在循环中...
这里有一个例子
我不知道哪一块的速度慢了--我以不同的方式应用它,包括在循环中...
在循环中似乎是这样的,你可以不使用函数