//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotBuy(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
PROFIT_BUY=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotSell(void)
{
bool res=false;
double level;
double PROFIT_SELL=0.00;
PROFIT_SELL=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| 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)
{
double price=m_symbol.Ask();
for(uint y=0; y<maxLimits; y++)
{
//--- open positionif(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,InpLots,price,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price,0.0);
}
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)
{
double price0=m_symbol.Bid();
for(uint y=0; y<maxLimits; y++)
{
if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_SELL,InpLots,price0,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening SELL position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price0,0.0);
}
res=true;
}
}
}
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
{
string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позицииif(position_GetSymbol==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT);
}
else
{
PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT);
}
}
}
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)
{
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profit
ClosePosition(m_position.Symbol()); // close a position by the specified symbo
}
res=true;
}
for(int u=PositionsTotal()-1; u>=0; u--) // returns the number of current positionsif(m_position.SelectByIndex(u)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profit
ClosePosition(m_position.Symbol()); // close a position by the specified symbo
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
又增加了一个功能。只需要在终端中实时检查。
这个版本是这样的 - 在测试器中播放
我告诉你,这不是一个糟糕的功能。它在这里和那里,拿着它的利润,不屑一顾。
但代码需要一些调整,现在工作很好。
我在真实账户上试了一下,我想从两个未结头寸 中获得一点利润。 我在设置中输入了160,我以为它会关闭最大的减仓,但没有,它关闭了
我以为它会关闭最大的亏损头寸,但它没有,它关闭了获得160利润的头寸,并关闭了两个头寸,我是个傻瓜。事实证明,我必须从第一个开仓位开始计算,加上减一。
#财产版本 "1.017"
我在第五天才发现如何正确使用这个功能。现在,它在一对所有买入或卖出的总利润上收盘。
我告诉你,这不是一个糟糕的功能。在这里和那里,它拿着它的利润,不给一个老鼠的屁股
我必须修改代码以使其工作--一切似乎都能正常工作
我不能为这个功能创建一个代码,让它在一个终端工作。我想在4个终端上试试,我不知道会有什么结果。
不能创建代码来使这个功能在一个终端中工作。我想在4个终端上试试,我不知道会有什么结果。
所有这4个终端 - 没有得到任何结果。而一般来说,这个来自Loss的功能--我不能写代码。
但我早就创造了这样的工作逻辑,只是用水平线。剩下的就是想一想怎样才能让这批人多起来
我们在顶部设置一条水平线
在底部设置一条水平线
一旦价格触及这些线,头寸将被打开,水平线将被设置。
这些 -
从这些水平线开始,将建立一个头寸,并放置第一条水平线--如此反复,直到价格能够达到这些水平线。
图2
这里是封闭的--在设置中设置,利润
---------------------------------------------
当它在该货币对上的利润达到200时--它将关闭头寸。
达到200并关闭所有买入或卖出的头寸 - 因为你可以在两个方向开仓,每一方都有自己的利润或损失。
- 现在,当它到达水平线时,它会打开一个位置 - 但你可以手动移动它们
该函数增加了很多,从一个损失 .
感谢这个人,https://www.mql5.com/ru/forum/107406#comment_3018721
伊戈尔-金
#财产版本 "1.018"
增加的可能性,以增加货币损失的手数
--------------------------------
大量增加的行动。只需要在设置中拿起一个数额,4级 - 最后一个数额,超过2000将打开手0.08
在图片中,从这些线路上打开的位置,也可以在设置中设置拖曳这些线路
在0的地方设置距离= 0;// Obj:跟踪止损(从价格到对象的距离,单位:点)。
----------------------------ВАЖНО!
当信号触发时,必须将线移到离栏杆更远的地方,否则信号将被反复触发。
情况是这样的--当拖曳一条水平线,并在触发命令时反弹到同一酒吧时
----------------------------------
为了使水平线不被重复,设置0 = 20;// Obj: 网格的步骤,point("0" -> false)
为零,它将执行命令并被删除。
该函数增加了很多,从一个损失 .
感谢这个人,https://www.mql5.com/ru/forum/107406#comment_3018721
伊戈尔-金
我今天用水平线测试了这个功能,以弥补损失(由于价格走错了方向,在途中遇到了水平线,从它开仓,水平线跳得更远,按一定的距离,损失增加,下次触及水平线时,开仓的手数会增加)。
我惊呆了。- 这种逻辑,把一切都拉到了正方。我想知道这样的奇迹能卖多少钱!?
----------------------------------------- 这里是另一个例子--价格对我不利。这是第一张图片,我将展示第二张图片,因为它的作用。
要了解这一切是如何运作的
在实用程序中有一些按钮(买入和卖出),它们可以完成水平线 所做的所有命令--你可以在测试器中查看它的工作原理。
配置按钮 ----------------
水平线设置 --------------------
以下是可以执行的命令,--------------------------------
盈利功能
------------ 利润是不通用的--买有自己的利润卖有自己的利润(例如你有两个仓位,一个在买,另一个在卖,在设置中你想赚100,所以虽然他们每个人都不会拿100。)同时每个货币对有不同的利润,每个都必须拿100(如果你正在处理多个货币对--对于每个货币对,你必须单独设置效用)。
Важно!!! правильно настроить , открытии лота (До убытка валюте)
在这对组合上有两个损失--总损失和(买入和卖出,每个都有自己的损失)
在这里,计算是在买你的损失中进行的,从卖你的。
轻微的修正--为了使水平线 对信号的反应更快。
有一种情况--价格触及并越过了水平线,但没有触发。
#财产版本 "1.019"
尝试一个新的功能.日历给出一个信号,可以从信号中选择一个命令。
我仍然需要考虑日历还需要哪些命令。
我已经有了这些。
在安装实用程序的图片中,这是图1。第二个将是执行的命令(在给定距离的水平线)。