空白的SetSellStop()。 { double lots=LotsCounting()。 double price=Ask-StepStop*Point; double loss=price+StepStop*Point。 double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point; int ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,0,loss,profit,"",0,0,CLR_NONE); 如果(ticket<1) Print("设置挂单失败,错误#",GetLastError()," ",(GetLastError())。 }
int TotalBuy() { int count=0。 for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 如果(OrderSymbol()!=Symbol())继续。 如果(OrderType()==OP_BUY)count++。 } 返回(计数)。 }
int TotalBuyStop() { int count=0。 for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 如果(OrderSymbol()!=Symbol())继续。 如果(OrderType()==OP_BUYSTOP) count++; } 返回(计数)。 }
总卖出量() { int count=0。 for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 如果(OrderSymbol()!=Symbol())继续。 如果(OrderType()==OP_SELL) count++; } 返回(计数)。 }
总卖出量(TotalSellStop)。 { int count=0。 for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 如果(OrderSymbol()!=Symbol())继续。 如果(OrderType()==OP_SELLSTOP) count++; } 返回(计数)。 }
我采用了概率理论,从统计学上看,如果开盘价在50点以内,那么开盘时10点的利润就比较容易达到--如果也有10点的止损(甚至点差也不是问题),那么趋势的变化就是一件好事......
添加一个止损,不考虑StepStop
//+------------------------------------------------------------------+
//| Volfram.mq4 | |
//| Vova-x@list.ru |
//| |
//+------------------------------------------------------------------+
#财产版权"Vova-x@list.ru"
#属性链接""
//-----------------------------------------
外部TakeProfit=10。
外部int StepStop=45;
外来的双倍Lots=0.01。
外部 bool MoneyManagement=true。
外部inttern MarginPercent=10。
//-------------------------------------------
int level_sell_stop;
int level_buy_stop;
//----------------------------------------------------------
空白的init()
{
// int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL)。
//打印("levelbuy_stop: "+minstop;)
}
//-----------------------------------------------------------
空白启动()。
{
if (!IsTradeAllowed()) return;
level_buy_stop=0。
level_sell_stop=0。
StepingStop()。
StepingPendings()。
如果(TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop ()。
如果(TotalSell()==0 && TotalSellStop()==0) SetSellStop()。
Comment("Level Buy Stop=",level_buy_stop*Point,
"n", "Level Sell Stop=",level_sell_stop*Point)。
}
//---------------------------------------------------------------------------------------------
空白的StepingStop()
{
如果(StepStop<1)返回。
int ask, bid, open, stop, x;
双重损失。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())
如果(OrderType()==OP_BUY)
{
bid=MathRound(Bid/Point)。
open=MathRound(OrderOpenPrice()/Point)。
stop=MathRound(OrderStopLoss()/Point)。
x=(bid-open)/StepStop; x--; x*=StepStop。
level_sell_stop=open+x;
如果(stop>=open+x)
loss=(open+x)*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE) 。
}
如果(OrderType()==OP_SELL)
{
ask=MathRound(Ask/Point)。
open=MathRound(OrderOpenPrice()/Point)。
stop=MathRound(OrderStopLoss()/Point)。
x=(open-ask)/StepStop; x--; x*=StepStop。
level_buy_stop=open-x;
如果(stop>0 && stop<=open-x)
损失=(开-x)*点。
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE) 。
}
}
}
//----------------------------------------------------------------------------
空白的StepingPendings()。
{
在 "卖出"、"买入"、"开盘 "中。
双重价格,损失,利润。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())
如果(OrderType()==OP_BUYSTOP)
{
如果(level_buy_stop==0)
open=MathRound(OrderOpenPrice()/Point)。
如果(open<=level_buy_stop)
price=level_buy_stop*Point;
损失=价格-步骤-停止*点。
profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE)。
}
如果(OrderType()==OP_SELLSTOP)
{
如果(level_sell_stop==0)
open=MathRound(OrderOpenPrice()/Point)。
如果(open>=level_sell_stop)
价格=level_sell_stop*点。
损失=价格+StepStop*Point。
profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE)。
}
}
}
//-------------------------------------------------------------------
空白的SetBuyStop()。
{
double lots=LotsCounting()。
double price=Bid+StepStop*Point;
double loss=price-StepStop*Point。
double profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,0,loss,profit,",0,0,CLR_NONE);
如果(ticket<1) Print("设置挂单失败,错误#",GetLastError()," ",(GetLastError())。
}
空白的SetSellStop()。
{
double lots=LotsCounting()。
double price=Ask-StepStop*Point;
double loss=price+StepStop*Point。
double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,0,loss,profit,"",0,0,CLR_NONE);
如果(ticket<1) Print("设置挂单失败,错误#",GetLastError()," ",(GetLastError())。
}
int TotalBuy()
{
int count=0。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())继续。
如果(OrderType()==OP_BUY)count++。
}
返回(计数)。
}
int TotalBuyStop()
{
int count=0。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())继续。
如果(OrderType()==OP_BUYSTOP) count++;
}
返回(计数)。
}
总卖出量()
{
int count=0。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())继续。
如果(OrderType()==OP_SELL) count++;
}
返回(计数)。
}
总卖出量(TotalSellStop)。
{
int count=0。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
如果(OrderSymbol()!=Symbol())继续。
如果(OrderType()==OP_SELLSTOP) count++;
}
返回(计数)。
}
double LotsCounting()
{
双层地段=地段。
如果 (MoneyManagement)
{
double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE)。
double freemargin=AccountFreeMargin()。
lots=0; 如果(lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1)。
}
如果(lot>10) lots=NormalizeDouble(lot,0);
如果(lot<0.01)lot=0.01。
返回(地段)。
}
// 结束
他们没有回复的原因可能是写这样的指标很简单,而且很可能没有必要。
乡亲们,救命啊!我无法计算出一个交易的最大成交量。
Max_lots永远是0!
而第二个问题,LEVEL是如何计算的?
谢谢,但还是?或者告诉我,也许在终端设置中,有一个选项可以沿着时间刻度的整个长度更清楚地显示小时标记?
简单来说,体积可以计算如下
和水平 = AccountEquity() / AccountFreeMargin() * 100。
和水平 = AccountEquity() / AccountFreeMargin() * 100。
不正确。这个公式并不能算出水平
是的,错了,水平 = AccountEquity() /AccountMargin() * 100。
是的,错了,水平 = AccountEquity() /AccountMargin() * 100。
很抱歉,今天是个好日子。
=====
摆动到一个毫无意义的高度......
从这里飞来的几个短语......
===========
安德烈-沃兹涅森斯基。