mql5语言的特点、微妙之处以及技巧 - 页 11 1...456789101112131415161718...247 新评论 Vitaly Muzichenko 2017.02.28 18:32 #101 利奥59。 谢谢你! 由于 "订单是交易 指令",只有挂单才能被归类为 "有效订单",而 "头寸-买入和卖出 "不是交易指令。还是我 "错过了什么"?在俄语中,订单就是命令。你给出一个命令,它可以是8个中的 任何一个。1,2,3,4 -买入-停止,卖出-停止,买入-限制和卖出-限制 -在订单被触发后,出现一个位置5、6 - 买入或卖出 - 这些不是订单7, 8 - stopLoss 和 TakeProfit - 这些是订单;这些是经纪公司退出市场的订单。案件1、2、3、4--待定的命令5,6 - 占领市场),即在市场上占据一定的位置,这就像在战争中一样:每个人在前线都有自己的位置,他们被指挥官派往那里。 Vasiliy Pushkaryov 2017.02.28 18:50 #102 利奥59。 谢谢! 由于 "一个订单就是一个交易 订单",只有挂单才能被归类为 "有效订单",而 "头寸--买入和卖出 "并不是一个交易订单。还是我 "错过了什么"? 你也可以在链接上看到第一节"交易条款"。 fxsaber 2017.02.28 18:51 #103 维塔利-穆齐琴科。5、6 - 买入或卖出 - 这些不再是订单了下面的代码显示,这些是实际的订单。 关于交易、自动交易系统和交易策略测试的论坛 mql5语言的特点、微妙之处以及技巧 fxsaber, 2017.02.25 16:30 // Триггер срабатывания SL/TP - работает только на демо/реале (не в тестере).void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result ){ if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) && PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) && (PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE))) { const double Price = OrderGetDouble(ORDER_PRICE_OPEN); if (Price == PositionGetDouble(POSITION_TP)) Print("Position #" + (string)Trans.position + " - triggered TP."); else if (Price == PositionGetDouble(POSITION_SL)) Print("Position #" + (string)Trans.position + " - triggered SL."); }} MetaEditor build 1490 错误、漏洞、问题 Features of the mql5 Leo59 2017.02.28 18:56 #104 fxsaber: 有效订单是指正在等待执行或取消的交易订单,但TP/SL和MarginCall订单除外。有效的订单可以是买入和卖出。 谢谢你! 据我所知,"有效订单 "一词是指买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。 如果我有:多头和 空头 头寸,并设置了买入限价 和 卖出止损,那么OrdersTotal()将返回值=4。 对吗? Vladimir Karputov 2017.02.28 19:03 #105 利奥59。 谢谢你! 根据我的理解,"有效订单 "指的是买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。 如果我有:多头和 空头 头寸,并设置了买入限价 和 卖出止损,那么OrdersTotal()将返回值=4,对吗? OrdersTotal()将返回2(这些是买入限价和卖出止损的挂单),PositionsTotal()也将返回2(买入和卖出头寸)。 Leo59 2017.02.28 19:06 #106 弗拉基米尔-卡尔普托夫。OrdersTotal()将返回2(这些是买入限价和卖出止损的挂单),PositionsTotal()也将返回2(买入和卖出头寸)。))现在这是酷!!!!函数OrdersTotal()返回什么? Maxim Khrolenko 2017.02.28 19:16 #107 利奥59。))现在,这就是酷!!!!函数OrdersTotal()返回什么? 我们可以使用以下术语:仓位--已经买入/卖出的东西或已经触发的挂单,而订单--如果价格达到一定水平,就可以开仓的挂单。 Vladimir Karputov 2017.02.28 19:19 #108 利奥59。))现在,这就是酷!!!!OrdersTotal()函数返回什么?已经阅读了帮助:)。研究它。//+------------------------------------------------------------------+//| OrdersTotalPositionsTotal.mq5 |//| Copyright © 2017, Vladimir Karputov |//| http://wmua.ru/slesar/ |//+------------------------------------------------------------------+#property copyright "Copyright © 2017, Vladimir Karputov"#property link "http://wmua.ru/slesar/"#property version "1.00"//---#include <Trade\PositionInfo.mqh>#include <Trade\OrderInfo.mqh> CPositionInfo m_position; // trade position object COrderInfo m_order; // pending orders object//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- int total=0; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties { //if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()), " ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8)); total++; } total=0; for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties { //if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic) Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()), " ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8)); total++; } }//+------------------------------------------------------------------+这里是 "贸易 "标签的状态。正如你所看到的,有两个未结头寸(欧元兑美元买入0.03和美元兑加元买入0.02),有三个本地订单(美元兑日元买入限额、美元兑日元卖出限额和欧元兑美元买入限额)。和打印出的脚本。2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) position 0: USDCAD POSITION_TYPE_BUY 0.02 1.327970002017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) position 1: EURUSD POSITION_TYPE_BUY 0.03 1.060880002017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.058790002017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.711000002017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000 附加的文件: OrdersTotalPositionsTotal.mq5 5 kb Features of the mql5 初学者的问题 MQL5 MT5 MetaTrader Questions from Beginners MQL5 Leo59 2017.02.28 19:23 #109 Maxim Khrolenko: 我们可以采用以下术语:头寸是指已经买入/卖出的东西,或者是手动的,或者是已经触发的挂单,订单是指在价格达到指定水平时开仓的挂单。 所有这些早已被接受,在编写文档之前,也许值得阅读Sergei Kovalev的教程(它被内置在MQL4中)。这就是如何构建一个分析市场和挂单的区块。 for (int i=1; i<=OrdersTotal(); i++) //Цикл по всем ордерам,.. { //отражённым в терминале if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий { // Здесь должен выполняться .. // ..анализ характеристик ордеров } } //Конец тела цикла 循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些在终端交易标签中显示的订单。因此,循环中的迭代次数将等于交易中存在的订单数量。 初学者的问题 MQL4 MT4 MetaTrader Features of the mql5 [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. Vitaly Muzichenko 2017.02.28 19:25 #110 利奥59。 一切都早已被接受,在写文档之前,读一读Sergei Kovalev的教程可能不会有什么坏处(它被内置在MQL4中)。这就是如何构建一个分析市场和挂单的区块。 循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些显示在终端交易标签中的订单。因此,循环中的迭代次数将是交易中存在的订单数量。没有必要进行退火处理)这是MT4代码,没有对订单和头寸进行划分--所有东西都混在一起。 1...456789101112131415161718...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你!
由于 "订单是交易 指令",只有挂单才能被归类为 "有效订单",而 "头寸-买入和卖出 "不是交易指令。还是我 "错过了什么"?
在俄语中,订单就是命令。你给出一个命令,它可以是8个中的 任何一个。
1,2,3,4 -买入-停止,卖出-停止,买入-限制和卖出-限制 -在订单被触发后,出现一个位置
5、6 - 买入或卖出 - 这些不是订单
7, 8 - stopLoss 和 TakeProfit - 这些是订单;这些是经纪公司退出市场的订单。
案件1、2、3、4--待定的命令
5,6 - 占领市场),即在市场上占据一定的位置,这就像在战争中一样:每个人在前线都有自己的位置,他们被指挥官派往那里。
谢谢!
由于 "一个订单就是一个交易 订单",只有挂单才能被归类为 "有效订单",而 "头寸--买入和卖出 "并不是一个交易订单。还是我 "错过了什么"?
5、6 - 买入或卖出 - 这些不再是订单了
下面的代码显示,这些是实际的订单。
关于交易、自动交易系统和交易策略测试的论坛
mql5语言的特点、微妙之处以及技巧
fxsaber, 2017.02.25 16:30
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
(PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
{
const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
if (Price == PositionGetDouble(POSITION_TP))
Print("Position #" + (string)Trans.position + " - triggered TP.");
else if (Price == PositionGetDouble(POSITION_SL))
Print("Position #" + (string)Trans.position + " - triggered SL.");
}
}
有效订单是指正在等待执行或取消的交易订单,但TP/SL和MarginCall订单除外。有效的订单可以是买入和卖出。
据我所知,"有效订单 "一词是指买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。
如果我有:多头和 空头 头寸,并设置了买入限价 和 卖出止损,那么OrdersTotal()将返回值=4。 对吗?
谢谢你!
根据我的理解,"有效订单 "指的是买入和/或卖出头寸,以及设定的挂单(由经纪人接受)。
如果我有:多头和 空头 头寸,并设置了买入限价 和 卖出止损,那么OrdersTotal()将返回值=4,对吗?
OrdersTotal()将返回2(这些是买入限价和卖出止损的挂单),PositionsTotal()也将返回2(买入和卖出头寸)。
))现在,这就是酷!!!!函数OrdersTotal()返回什么?
))现在,这就是酷!!!!OrdersTotal()函数返回什么?
已经阅读了帮助:)。
研究它。
//| OrdersTotalPositionsTotal.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo m_position; // trade position object
COrderInfo m_order; // pending orders object
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int total=0;
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
{
//if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
" ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
total++;
}
total=0;
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
{
//if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
" ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
total++;
}
}
//+------------------------------------------------------------------+
这里是 "贸易 "标签的状态。
正如你所看到的,有两个未结头寸(欧元兑美元买入0.03和美元兑加元买入0.02),有三个本地订单(美元兑日元买入限额、美元兑日元卖出限额和欧元兑美元买入限额)。
和打印出的脚本。
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1) pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
我们可以采用以下术语:头寸是指已经买入/卖出的东西,或者是手动的,或者是已经触发的挂单,订单是指在价格达到指定水平时开仓的挂单。
这就是如何构建一个分析市场和挂单的区块。
{ //отражённым в терминале
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
// Здесь должен выполняться ..
// ..анализ характеристик ордеров
}
} //Конец тела цикла
循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些在终端交易标签中显示的订单。因此,循环中的迭代次数将等于交易中存在的订单数量。
一切都早已被接受,在写文档之前,读一读Sergei Kovalev的教程可能不会有什么坏处(它被内置在MQL4中)。
这就是如何构建一个分析市场和挂单的区块。
循环语句的标题中指定了初始值i=1,而循环结束的条件是表达式i<=OrdersTotal()。函数OrdersTotal()返回市场订单和挂单的总金额,即那些显示在终端交易标签中的订单。因此,循环中的迭代次数将是交易中存在的订单数量。
没有必要进行退火处理)
这是MT4代码,没有对订单和头寸进行划分--所有东西都混在一起。