新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 938 1...931932933934935936937938939940941942943944945...1953 新评论 Koldun Zloy 2019.08.11 08:06 #9371 Seric29: 我想创建一个一维数组,其中0到4的元素将存储双数,5到9将存储数据名,10到14将存储int。是否可以用mql4来组织? 如果可以,你能告诉我怎么做吗?我在C++中看到过一个带结构的例子,但我已经失去了网站的链接? 如果你为每种类型分配了特定的数组单元,那就做一个结构而不是数组。 Igor Makanu 2019.08.11 08:19 #9372 Koldun Zloy: 如果你为每种类型分配了特定的数组单元,那么就做一个结构而不是数组。 不幸的是,他甚至不能将任务正式化 一方面,看起来他想摆脱C++/MQL中严格的类型化,这里有一个很好的讨论主题,虽然我怀疑这对他有帮助https://www.mql5.com/ru/forum/294094。 在这个讨论的过程中(我想它已经持续了3个月?),事实证明,@Seric29 需要摆脱对函数签名的描述,得到一个接受任意数量参数的 "幻影 "函数 然后在讨论中发现,多维动态数组应该参与这一切,这些数组应该作为参数传入函数中 也就是说,这是一个不正规的任务,其解决方案不断地以 "来自现场的呼喊 "而告终,开发人员减少了一些功能,并给我循环运算符的源代码,我将重做它们,然后是后者。 塞里奇29。 如何给mql4的开发者写一封信,如何看到编译器的代码,有没有办法给它增加更多的功能,让它不那么静态? ...就这样吧..."令人震惊 "这句话是你可以说的最起码的一句话 )))) Koldun Zloy 2019.08.11 08:31 #9373 这就是为什么我没有给出任何细节。 学习基础知识是无法摆脱的。 Taras Slobodyanik 2019.08.11 09:20 #9374 Koldun Zloy: 学习基础知识是无法摆脱的。 有意思的是,一个人不学习基本知识,却试图表明他已经知道这一切,而你们都是 元气大伤,阻止他做他的工作) procom 2019.08.11 09:53 #9375 Taras Slobodyanik: 有意思的是,这个人不是在学习基础知识,而是想表明他已经知道了,而你们都是 元气大伤的人,妨碍了他的工作) 问候。我看了专家顾问视频 "从MQL4到MQL5 - 如何为Metatrader 5重写一个EA"。 非常感谢作者。我已经决定自己尝试。我决定自己尝试一下。该想法如下。 1.我在输入中设置了dtriger = 1 - 买入打开。 2.我设置dtriger = -1 - 卖出开盘。 3.我在多插头中设置了dtriger = 0 - 所有打开的都关闭了。 我在常见问题中看到,在MT5中不可能持有相反的头寸。 而我拥有它们。 问题:如何正确规定未结头寸的平仓方式 问题是:如何正确登记在箭头开口时现有头寸的平仓(反转)? 非常感谢你。#include <Trade\PositionInfo.mqh>.#include <Trade\Trade.mqh>。#include <Trade\SymbolInfo.mqh>。#include <Trade\OrderInfo.mqh>。 CPositionInfo o_position。 CTrade o_trade。 CSymbolInfo o_symbol; 秩序信息o_order。 输入int triger = 0。 输入 double StartLot = 0.01; 输入 double lpos_volume = 1.0; 输入int Step = 10; 输入 int MagicNumber = 12345; // Magic nuaber 输入 int Slippage = 30; // 滑移量 int dtriger; int dStep;//+------------------------------------------------------------------+//| 专家初始化功能|//+------------------------------------------------------------------+ int OnInit(){ dStep = Step ; dtriger = triger ; 如果(!o_symbol.Name(Symbol())) return(INIT_FAILED)。 RefreshRates()。 o_trade.SetExpertMagicNumber(MagicNumber)。 如果(IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK)){ o_trade.SetTypeFilling(ORDER_FILLING_FOK)。} 否则如果(IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC)){ o_trade.SetTypeFilling(ORDER_FILLING_IOC)。} 否则{ o_trade.SetTypeFilling(ORDER_FILLING_RETURN)。} o_trade.SetDeviationInPoints(Slippage)。 如果(o_symbol.Digits() == 3 || o_symbol.Digits() == 5 ){ dStep = 10 ;} return(INIT_SUCCEEDED)。}//+------------------------------------------------------------------+//| 专家去初始化功能|//+------------------------------------------------------------------+ 空白的OnDeinit(const int reason)。{}//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+ 空白的OnTick(){ 日期时间lpos_time = 0。 double lpos_price_open = 0.0; ENUM_POSITION_TYPE lpos_type = -1; 䵮䵮pos_count = 0。 double sum_profit = 0; for (int i = PositionsTotal() - 1; i>=0; i--){ 如果(o_position.SelectByIndex(i)){ 如果(o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber){ 如果(o_position.Time() > lpos_time){ lpos_time = o_position.Time(); //OrderOpenTime(); lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice()。 lpos_type = o_position.PositionType() ; //OrderTipe();} pos_count++; sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;} } }// 计算待处理订单的数量 int stop_count=0。 for (int i=OrdersTotal()-1; i >=0; i--){ 如果(o_order.SelectByIndex(i)) { 如果(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber) stop_count++;}} 如果(!RefreshRates()) 返回 ; 如果(dtriger == 0 ){ CloseAll()。 返回。 } // + ----- 打开第一单 ++++++++++ 如果(pos_count == 0 && stop_count == 0 ){ 如果 ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL){ o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111} 如果 ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY ){ o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111}}// + ----- 反向++++++++++++++++++++++++++++ 如果(pos_count>0){ 如果(lpos_type == POSITION_TYPE_BUY ){ 如果 ( dtriger == -1 ){ o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++}} 如果(lpos_type==POSITION_TYPE_SELL ){ 如果 ( dtriger == 1 ){ o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++}}} 如果(pos_count>0 && stop_count>0) DeleteStopOrders()。} //----------------------------------------------------------- bool RefreshRates(){ 如果(!o_symbol.RefreshRates()) return(false) ; 如果(o_symbol.Ask() == 0 || o_symbol.Bid() == 0) return(false)。 return(true)。} //--- --------------------------------------------------------- bool IsFillingTypeAllowed (string symbol, int fill_type){ int filling = (int)SymbolInfoInteger(符号,SYMBOL_FILLING_MODE)。 return((fill && fill_type) == fill_type) ;} // -------------------------------------------------- 空白的CloseAll(){ for (int index = PositionsTotal()-1; index >=0; index--){ 如果(o_position.SelectByIndex(index)){ 如果(o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)。{ o_trade.PositionClose(o_position.Ticket())}} }} //----------------------------------------------------------- // 删除所有挂单//------------------------------------- 空白 删除订单(DeleteStopOrders)。{ for (int i = OrdersTotal() - 1; i >= 0; i-- ){ 如果(o_order.SelectByIndex(i)) 如果(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber) o_trade.OrderDelete(o_order.Ticket())}} //+------------------------------------------------------------------+ Any questions from newcomers 初学者的问题 MQL5 MT5 MetaTrader 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Artyom Trishkin 2019.08.11 09:55 #9376 procom: 问候.... 请正确插入代码。 procom 2019.08.11 10:50 #9377 Artyom Trishkin: 请正确插入代码。 ok #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\OrderInfo.mqh> CPositionInfo o_position; CTrade o_trade; CSymbolInfo o_symbol; COrderInfo o_order; input int triger = 0; input double StartLot = 0.01; input double lpos_volume = 1.0; input int Step = 10; input int MagicNumber = 12345; // Magic nuaber input int Slippage = 30; // slippage int dtriger; int dStep; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { dStep = Step ; dtriger = triger ; if (!o_symbol.Name(Symbol())) return(INIT_FAILED); RefreshRates(); o_trade.SetExpertMagicNumber(MagicNumber) ; if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK)) { o_trade.SetTypeFilling(ORDER_FILLING_FOK); } else if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC)) { o_trade.SetTypeFilling(ORDER_FILLING_IOC); } else { o_trade.SetTypeFilling(ORDER_FILLING_RETURN); } o_trade.SetDeviationInPoints(Slippage); if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5 ) { dStep = 10 ; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { datetime lpos_time = 0; double lpos_price_open = 0.0; ENUM_POSITION_TYPE lpos_type = -1; int pos_count = 0; double sum_profit = 0; for (int i = PositionsTotal() - 1; i>=0; i--) { if (o_position.SelectByIndex(i)) { if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber) { if (o_position.Time() > lpos_time) { lpos_time = o_position.Time(); //OrderOpenTime(); lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice(); lpos_type = o_position.PositionType() ; //OrderTipe(); } pos_count++; sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ; } } } // Считаем кол-во отложенных ордеров int stop_count=0; for (int i=OrdersTotal()-1; i >=0; i--) { if (o_order.SelectByIndex(i)) { if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber) stop_count++; } } if (!RefreshRates()) return ; if(dtriger == 0 ) { CloseAll(); return; } // + ----- Откраваем Первый ордер ++++++++++ if (pos_count == 0 && stop_count == 0 ) { if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL) { o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111 } if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY ) { o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111 } } // + ----- Переворот ++++++++++++++++++++++++++++ if (pos_count>0) { if(lpos_type == POSITION_TYPE_BUY ) { if ( dtriger == -1 ) { o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++ } } if (lpos_type==POSITION_TYPE_SELL ) { if ( dtriger == 1 ) { o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++ } } } if(pos_count>0 && stop_count>0) DeleteStopOrders() ; } //----------------------------------------------------------- bool RefreshRates() { if (!o_symbol.RefreshRates()) return(false) ; if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0) return(false); return(true); } //--- --------------------------------------------------------- bool IsFillingTypeAllowed (string symbol, int fill_type) { int filling = (int)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE); return((filling && fill_type) == fill_type) ; } // -------------------------------------------------- void CloseAll() { for (int index = PositionsTotal()-1; index >=0; index--) { if (o_position.SelectByIndex(index)) { if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber) { o_trade.PositionClose(o_position.Ticket()); } } } } //----------------------------------------------------------- // Delete all pending orders //------------------------------------- void DeleteStopOrders() { for (int i = OrdersTotal() - 1; i >= 0; i-- ) { if (o_order.SelectByIndex(i)) if(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber) o_trade.OrderDelete(o_order.Ticket()); } } //+------------------------------------------------------------------+ 附加的文件: Stend_t1.mq5 12 kb Seric29 2019.08.11 12:40 #9378 Igor Makanu: 至少要开始读一本关于C++的书,你的问题很爆炸,你写的是技术术语,乍一看你似乎在问一个具体的问题,但实际上你只是在术语上操作,而没有理解本质....,宏会返回什么?会在哪里返回?在宏的主体中,一个可重载的函数....。我甚至无法解释你的问题是什么样子的。 要了解什么是宏,请正确地拼写术语,即macroSETTING ,也许你会更容易理解它是什么。 在mql4中,功能和C++都减少了,换句话说,它是一种过于静态的语言。我可以说我的想法失败了,我写了一个简单的没有类的重载,我添加了参数并给它们0,我试图在宏中调用它,我得到了一个错误,说有3个函数,所以事实证明我还需要描述哪一个要调用,如何调用,我不说以后要处理什么样的绊脚石。也许最好不要做任何事情,那么你就不会犯错。 Igor Makanu 2019.08.11 12:56 #9379 Seric29: mql4有削减功能和c++,换句话说是太静态的语言。 究竟削减了什么? 换句话说,你不必,尤其是连google都不知道"太 静态的语言",C++是一种静态类型的语言,思考它是没有意义的,它就是这样。 塞里奇29。 也许最好不要做任何事情,那么你就不会犯错。 我将是简短的RTFM(潜伏更多)。 Nikita Chernyshov 2019.08.11 14:13 #9380 这个问题纯粹是一个美学问题。 我怎样才能使它在这里有一张自己的照片呢?MT4 1...931932933934935936937938939940941942943944945...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想创建一个一维数组,其中0到4的元素将存储双数,5到9将存储数据名,10到14将存储int。是否可以用mql4来组织? 如果可以,你能告诉我怎么做吗?我在C++中看到过一个带结构的例子,但我已经失去了网站的链接?
如果你为每种类型分配了特定的数组单元,那就做一个结构而不是数组。
如果你为每种类型分配了特定的数组单元,那么就做一个结构而不是数组。
不幸的是,他甚至不能将任务正式化
一方面,看起来他想摆脱C++/MQL中严格的类型化,这里有一个很好的讨论主题,虽然我怀疑这对他有帮助https://www.mql5.com/ru/forum/294094。
在这个讨论的过程中(我想它已经持续了3个月?),事实证明,@Seric29 需要摆脱对函数签名的描述,得到一个接受任意数量参数的 "幻影 "函数
然后在讨论中发现,多维动态数组应该参与这一切,这些数组应该作为参数传入函数中
也就是说,这是一个不正规的任务,其解决方案不断地以 "来自现场的呼喊 "而告终,开发人员减少了一些功能,并给我循环运算符的源代码,我将重做它们,然后是后者。
如何给mql4的开发者写一封信,如何看到编译器的代码,有没有办法给它增加更多的功能,让它不那么静态?
...就这样吧..."令人震惊 "这句话是你可以说的最起码的一句话 ))))
这就是为什么我没有给出任何细节。
学习基础知识是无法摆脱的。
学习基础知识是无法摆脱的。
有意思的是,一个人不学习基本知识,却试图表明他已经知道这一切,而你们都是 元气大伤,阻止他做他的工作)
有意思的是,这个人不是在学习基础知识,而是想表明他已经知道了,而你们都是 元气大伤的人,妨碍了他的工作)
问候。我看了专家顾问视频 "从MQL4到MQL5 - 如何为Metatrader 5重写一个EA"。
非常感谢作者。我已经决定自己尝试。我决定自己尝试一下。该想法如下。
1.我在输入中设置了dtriger = 1 - 买入打开。
2.我设置dtriger = -1 - 卖出开盘。
3.我在多插头中设置了dtriger = 0 - 所有打开的都关闭了。
我在常见问题中看到,在MT5中不可能持有相反的头寸。
而我拥有它们。
问题:如何正确规定未结头寸的平仓方式
问题是:如何正确登记在箭头开口时现有头寸的平仓(反转)?
非常感谢你。
#include <Trade\PositionInfo.mqh>.
#include <Trade\Trade.mqh>。
#include <Trade\SymbolInfo.mqh>。
#include <Trade\OrderInfo.mqh>。
CPositionInfo o_position。
CTrade o_trade。
CSymbolInfo o_symbol;
秩序信息o_order。
输入int triger = 0。
输入 double StartLot = 0.01;
输入 double lpos_volume = 1.0;
输入int Step = 10;
输入 int MagicNumber = 12345; // Magic nuaber
输入 int Slippage = 30; // 滑移量
int dtriger;
int dStep;
//+------------------------------------------------------------------+
//| 专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
dStep = Step ;
dtriger = triger ;
如果(!o_symbol.Name(Symbol()))
return(INIT_FAILED)。
RefreshRates()。
o_trade.SetExpertMagicNumber(MagicNumber)。
如果(IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK))
{
o_trade.SetTypeFilling(ORDER_FILLING_FOK)。
}
否则如果(IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC))
{
o_trade.SetTypeFilling(ORDER_FILLING_IOC)。
}
否则
{
o_trade.SetTypeFilling(ORDER_FILLING_RETURN)。
}
o_trade.SetDeviationInPoints(Slippage)。
如果(o_symbol.Digits() == 3 || o_symbol.Digits() == 5 )
{
dStep = 10 ;
}
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//| 专家去初始化功能|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
日期时间lpos_time = 0。
double lpos_price_open = 0.0;
ENUM_POSITION_TYPE lpos_type = -1;
䵮䵮pos_count = 0。
double sum_profit = 0;
for (int i = PositionsTotal() - 1; i>=0; i--)
{
如果(o_position.SelectByIndex(i))
{
如果(o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
如果(o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime();
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice()。
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// 计算待处理订单的数量
int stop_count=0。
for (int i=OrdersTotal()-1; i >=0; i--)
{
如果(o_order.SelectByIndex(i))
{
如果(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
如果(!RefreshRates())
返回 ;
如果(dtriger == 0 )
{
CloseAll()。
返回。
}
// + ----- 打开第一单 ++++++++++
如果(pos_count == 0 && stop_count == 0 )
{
如果 ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL)
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
如果 ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- 反向++++++++++++++++++++++++++++
如果(pos_count>0)
{
如果(lpos_type == POSITION_TYPE_BUY )
{
如果 ( dtriger == -1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++
}
}
如果(lpos_type==POSITION_TYPE_SELL )
{
如果 ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++
}
}
}
如果(pos_count>0 && stop_count>0)
DeleteStopOrders()。
}
//-----------------------------------------------------------
bool RefreshRates()
{
如果(!o_symbol.RefreshRates())
return(false) ;
如果(o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
return(false)。
return(true)。
}
//--- ---------------------------------------------------------
bool IsFillingTypeAllowed (string symbol, int fill_type)
{
int filling = (int)SymbolInfoInteger(符号,SYMBOL_FILLING_MODE)。
return((fill && fill_type) == fill_type) ;
}
// --------------------------------------------------
空白的CloseAll()
{
for (int index = PositionsTotal()-1; index >=0; index--)
{
如果(o_position.SelectByIndex(index))
{
如果(o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)。
{
o_trade.PositionClose(o_position.Ticket())
}
}
}
}
//-----------------------------------------------------------
// 删除所有挂单
//-------------------------------------
空白 删除订单(DeleteStopOrders)。
{
for (int i = OrdersTotal() - 1; i >= 0; i-- )
{
如果(o_order.SelectByIndex(i))
如果(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket())
}
}
//+------------------------------------------------------------------+
问候....
请正确插入代码。
请正确插入代码。
至少要开始读一本关于C++的书,你的问题很爆炸,你写的是技术术语,乍一看你似乎在问一个具体的问题,但实际上你只是在术语上操作,而没有理解本质....,宏会返回什么?会在哪里返回?在宏的主体中,一个可重载的函数....。我甚至无法解释你的问题是什么样子的。
要了解什么是宏,请正确地拼写术语,即macroSETTING ,也许你会更容易理解它是什么。
在mql4中,功能和C++都减少了,换句话说,它是一种过于静态的语言。我可以说我的想法失败了,我写了一个简单的没有类的重载,我添加了参数并给它们0,我试图在宏中调用它,我得到了一个错误,说有3个函数,所以事实证明我还需要描述哪一个要调用,如何调用,我不说以后要处理什么样的绊脚石。也许最好不要做任何事情,那么你就不会犯错。
mql4有削减功能和c++,换句话说是太静态的语言。
究竟削减了什么?
换句话说,你不必,尤其是连google都不知道"太 静态的语言",C++是一种静态类型的语言,思考它是没有意义的,它就是这样。
也许最好不要做任何事情,那么你就不会犯错。
我将是简短的RTFM(潜伏更多)。
这个问题纯粹是一个美学问题。
我怎样才能使它在这里有一张自己的照片呢?MT4