Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к...
Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к сетке графика...
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT);
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
elseif(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT);
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
elseif(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
inputint limit_total_symbol = 3; // Кол-во Позиции при Убыткеinputdouble TargetOpenLot = 1000000; // Убыток на Позиции Открыть Позицию
这个版本是这样的 - 在测试器中
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotBuy(void)
{
bool res=false;
double PROFIT_BUY=0.00;
CloseTikB=iClose(NULL,Period(),0);
OpenTikB=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikB<CloseTikB)
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetOpenLot)
ExtNeedOpenBuy=true;
if(LongObjOpened())
return(res);
}
res=true;
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotSell(void)
{
bool res=false;
double PROFIT_SELL=0.00;
CloseTikS=iClose(NULL,Period(),0);
OpenTikS=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikS>CloseTikS)
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetOpenLot)
ExtNeedOpenSell=true;
if(ShortObjOpened())
return(res);
}
res=true;
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
#财产版本 "1.012"
略微改善了功能
当被触发时,水平线SELL开仓并显示水平线BUY,反之亦然。
此外,线是由"0" 设置的,距离由Obj: Trailing Step MACD 设置。
或从水平线"LOW " 开始。
FromTimer "LOW Up""LOW Down "相同,只有距离被设定(输入 ushort InpObjTrailingStepCS = 5;//Obj: 追踪步骤,单位是点(1.00045-1.00055=1 点)。
如何知道在指标 Low_Macd_Line.mq5中 设置的 水平线的距离 (对每一对,有不同的距离)
复制并粘贴在实用程序设置中
在图片中,从 "0"到水平买入 0.0064,当它触及水平低点时,水平卖出将被设置(仅低于"0"-0.0064)。
重要的是!!!不要在数字前面加上减号(-),这是我们在工具中输入的。
变体之一,该功能如何工作
改变了损益功能#属性版本 "1.013"
如果达到,将关闭并删除一切,并将所有打开的窗口改为指定的模式。
该功能打开一个位置,从利润或亏损
我 在UtilityCommand.mq5 中做了一个辅助指标,线条在移动,可以从中设置命令。我用SEM 建造了它
我发现https://www.mql5.com/ru/code/16269,原来是一个mt4脚本,我感谢作者Alexey Volchanskiy。
我搜索了https://www.mql5.com/ru/code/16269,结果发现这个脚本来自mt4 谢谢作者Alexey Volchanskiy!
有一个脚本不仅适用于mt4,也适用于mt5https://www.mql5.com/ru/code/16262 我已经在指标中掌握了它。我感谢作者Alexey Volchanskiy!
改变了损益功能#属性版本 "1.013"
当达到时,它将关闭并删除一切,并将所有打开的窗口改为指定的模式。
#财产版本 "1.014"
不过,从平衡中获利是一个必要的功能 - 当一个专家顾问在几个货币对上工作时。
重新设计了损益表,以便在不影响其他货币对的情况下关闭一个特定货币对。
盈利和亏损, 在1000000设置中写下金额(例如1个单位的货币)--直到它拿下100万的货币,它才会关闭头寸
#财产版本 "1.014"
不过,当一个专家顾问在几个货币对上工作时,从平衡中获利是一个必要的功能。
重新设计了损益表,以便在这个货币对上关闭,不影响其他货币对。
损益功能 将金额(如1单位的你的货币)设定为1000000 - 它不会平仓,直到取走100万你的 货币 为止
#财产版本 "1.015"
稍微固定一下,这个功能(盈亏)--因为在一个货币对上,你可以开几个头寸,一种方式--现在将关闭总金额,一个头寸可以是正数,另一个是负数,但总金额等于设置中的指定金额。
----------------------
这里有一个函数(利润和损失)。
#财产版本 "1.015"
修正了这个功能(盈亏)--因为在一个货币对上,你可以开几个头寸,一个方向--现在它将根据总金额关闭,一个头寸可能是正数,另一个是负数,但总金额等于设置中的指定金额。
----------------------
这里有一个函数(利润和损失)。
我在真实账户上试了一下,我想从两个开仓的头寸 中获得一点利润。 我把它设置为160,以为它会关闭最大的减仓,但它没有。
我以为它会关闭最大的亏损头寸,但它没有,它关闭了获得160利润的头寸,并关闭了两个头寸,我是个傻瓜。事实证明,我必须从第一次开仓开始计算,加上减去的位置
#财产版本 "1.015"
固定它(盈亏)--一个人可以为一个货币对开几个头寸,它将按总金额关闭,一个头寸可能是盈利的,另一个是负的,但总金额等于设置中的指定金额。
----------------------
这里是函数(利润和损失)。
#财产版本 "1.016"
我试过不同的方法,但这似乎是唯一的方法。如果我一次性设定金额,开了很多仓位--它关闭的金额是一样的。
下面是这个功能,有点不同
#财产版本 "1.016"
我已经尝试了各种方法,但这是唯一应该的方式。如果我一次性设定金额,开了很多仓位--它正好关闭了这个金额。
这里有一个函数,有点不同
我在测试器中检查了这个功能--我设置了300的利润,10000的损失。 开盘来自欧元兑美元H1的指标(LeMan_BrainTrend1Sig),余额为100的杠杆100,0.01手。
货币中的盈亏功能--在同一货币对上,BUY和SELL都有自己的利润,(例如,如果BUY已经获利,它将关闭他们的头寸,SELL在获利之前不会关闭。)
我在测试器中检查了这个功能--我设置了利润300,损失10000。 使用指标(LeMan_BrainTrend1Sig)在EURUSD H1上进行开盘,余额100,杠杆100,手数0.01。
货币中的盈亏功能--BUY和SELL在一个货币对上有自己的利润,(例如,如果BUY已经获利,它将关闭他们的头寸,SELL不会关闭,直到他们达到自己的利润。)
又增加了一个功能。我只是需要在终端实时检查。
这个版本是这样的 - 在测试器中