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

 
Igor Makanu:

我怀疑我能解释,如果你问的是这个问题的话

对象是...比方说,一个类型为的变量

在你的代码部分,有一个类CProgram

在你的代码中的某个地方,它必须说

并需要调用

你是上帝!!我理解你,一切都解决了)
 

你能告诉我这是什么意思吗?

应该检查'OrderSend'的返回值 TestLibrary.mq4 64 6

 
MakarFX:

你能告诉我这是什么意思吗?

应该检查'OrderSend'的返回值 TestLibrary.mq4 64 6

应检查OrderSend的结果。:-)

 
Maxim Kuznetsov:

必须对OrderSend的结果进行验证。:-)

我懂英语))))。

如何检查?

 
MakarFX:

我懂英语))))。

你如何检查它?

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

 
Maxim Kuznetsov:

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

谢谢你
 
//+------------------------------------------------------------------+
//| TEST_V01.mq4 | |
//| Copyright 2019, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#属性链接 "https://www.mql5.com"
#财产版本 "1.00"
#属性严格
#define MAGICMA 20131111
//----输入
输入int Risk = 1;
输入int Max_Risk = 8;
输入int SL = 100。
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
//---
}
//+------------------------------------------------------------------+
//|专家打勾功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
如果(OrdersTotal()==0)
如果(OrderSend(Symbol(), OP_BUY, Lot_Calculate(Symbol(), Risk, Max_Risk, SL), Ask, 30, NormalizeDouble(Ask - SL*Point, Digits), NormalizeDouble(Ask + SL*Point, Digits)," ,MAGICMA,0,Blue)==-1)
Print("Error: " ,GetLastError())。
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------
// Lot_Calculate |
//-----------------------------------------------------------------
double Lot_Calculate(string _symbol, int _risk, int _m_risk, int _pips)
{
_m_risk = Max_Risk。
_pips +=20。
double minlot = MarketInfo(_symbol,MODE_MINLOT);
double maxlot = MarketInfo(_symbol,MODE_MAXLOT);
double steplot = MarketInfo(_symbol,MODE_LOTSTEP);
double money_risk = NormalizeDouble(AccountEquity()*_risk/100,2);
double calk_pip_cost = NormalizeDouble(money_risk/_pips,2); // 每点成本
double lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE); // 一个标准手的价格变化时,一个点的成本。
// while(!MathIsValidNumber(lot_pip_cost || lot_pip_cost ==0)
//{
// lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE)。
//}
double lot = calk_pip_cost/lot_pip_cost。
//-------------------------------------------------------------
double money_m_risk = NormalizeDouble(AccountEquity()*2*_risk/100,2); // 我也将风险加倍。
double _m_calk_pip_cost = NormalizeDouble(money_m_risk/_pips,2); // 计算加倍后的一个点值
double lot_m = _m_calk_pip_cost/lot_pip_cost。// 倍增后的批次计算
如果(lot <= minlot) lot = minlot;
else if(lot >= maxlot) lot = maxlot;
否则如果(lot > minlot && lot < maxlot)
{
int k = int((lot - minlot)/steplot)。
lot = NormalizeDouble(minlot+k*steplot,2);
}
return(lot)。
// ------------------------------------------------------
{
如果(lot_m <= minlot) lot_m = minlot; // 从这一行开始,我的自我
else if(lot_m >= maxlot) lot_m = maxlot;
否则如果(lot_m > minlot && lot_m < maxlot)
{
int k = int((lot - minlot)/steplot)。
lot_m = NormalizeDouble(minlot+k*steplot,2);
}
return(lot_m)。
如果(OrderProfit()>0) lot--;
如果(OrderProfit()<0) lot_m++;
}
如果(_m_risk == Max_Risk) lot_m = lot; // 你不能在这里理解什么
return(0);

}


我已经在这个问题上纠结了两天。我无法编写重新计算风险的函数。

如果交易被TP关闭,风险将保持不变。

如果风险被SL关闭,则风险增加2倍,以此类推,直到专家顾问的输入变量中规定的值,例如Max_Risk=8。

然后重置为初始风险风险=1。

那么,如果在翻倍之后,交易在TR平仓,我们又回到了最初的风险=1。

你能帮忙吗?

预先感谢你。

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. и снова dll и маркет День добрый! Правило №1 dll на...
 
根本不是这样的。
 

下午好!

专业人士请帮助。我不能解决一个问题。以下是代码。


datetime some_time=TimeCurrent()。

int start()

{

双和。

双层剃须刀。

int k=iBarShift(",PERIOD_M5,some_time)。

double VAL0=MathAbs(iATR(NULL,0,1,1))/Point。

double VAL1=MathAbs(iATR(NULL,0,1,0))/Point。

如果(VAL1>VAL0)

{

razn =MathAbs((iATR(NULL,0,1,0))-(iATR(NULL,0,1,1))/Point;

for(int i = k; i >= 1; i--)

{

summ=summ+razn。

}

Comment("Used periods: ",k,"\n,

"ATR previous: "+VAL0+"\n",

"ATR电流:",VAL1,"/n"。

"ATR差异:",razn,"(n)。

"ATR差异:",summ,"\n")。

}

return(0);

}

其思路如下:专家顾问计算当前ATR值与上一个ATR值之间的差异。但只是随着ATR的增加。

这一差异显示在变量 "razn "中。我需要变量 "razn "的值在每个新条形的到来时被添加/累积到变量 "summ"。

在目前的版本中,"summ "的积累不能正确工作。

我怀疑这与循环有关。


Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
 
各位论坛成员下午好。我找不到任何信息。有没有什么工具可以从低点和高点自动画线(不是水平线)到某个点的水平?换句话说,你是否定义了低点或高点,并画线到蜡烛图,以固定与高点或低点的距离?我发现分形指标 做了低位和高位判断。但我一直没能找到这样的附加功能,允许我在价格变化的某一点上画一条线。