//+----------------------------------------------------------------------------------------+//| ММ Функция работает по принципу наращивания лота при увеличении |//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается |//| на начальный лот в данном случае 0.1 если происходит профит то следующий |//| лот расчитывается по прогресии. |//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит |//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки |//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее |//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3, |//| далее если сделка будет прибыльной то следующий лот откроется из расчета |//| баланса депозита "баланс/500*0.1"=лот внешние переменные |//+----------------------------------------------------------------------------------------+double LotsOptimized() {
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot = Lots;
int orders = OrdersHistoryTotal();
int losses = 0;
lot = NormalizeDouble((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2);
if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print("Error in history!");
break;
}
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL || OrderMagicNumber()!=mn) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot;
return (lot);}
if (GetProfitOpenPosInCurrency()>NumberOfLossPosToday())
int slippage=1;
int ask, bid, open;
double point;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUY)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
bid=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point);
open=MathRound(OrderOpenPrice()/point);
if (bid-open<Profit) continue;
OrderClose(OrderTicket(),OrderLots(),bid*point,slippage);
}
if (OrderType()==OP_SELL)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
ask=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point);
open=MathRound(OrderOpenPrice()/point);
if (open-ask<Profit) continue;
OrderClose (OrderTicket(),OrderLots(),ask*point,slippage);
}
}
}
//--------------------------------------------------------------------double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
double p=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(p);
}
//--------------------------------------------------------------------int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
t=OrderCloseTime();
if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
if (OrderProfit()<0) kp++;
}
}
}
}
}
}
}
return(kp);
}
请你告诉我,我在代码中的"mn"是否正确?
请建议一个时间 "条件",让EA在某一时间开启,我可以设置这个条件。
请告诉我,我是否在代码中正确地添加了"mn",以便在MM中跟踪魔术号码?
如果Magic被声明为全局变量 或常量。
int mn = ****;
等结构上没有错误(小的语法编辑)。
你应该通过MODE_LOTSTEP的倍数来规范交易,否则你迟早会遇到错误131(ERR_INVALID_TRADE_VOLUME)。
好吧,还有没有在函数中声明的变量是你的良知......:)
你好。
我需要一些专业的帮助(知道这个东西的人......)。
我不能让这个想法发挥作用......我找到了所有的东西,并把它放到机器人中,但它仍然不能这样工作=(
我想关闭所有的利润。
我想在总盈利大于总亏损时关闭所有盈利的头寸。我尝试关闭所有盈利的头寸(盈利>亏损)。
对代码的帮助。关闭所有盈利交易的条件(总利润>总损失)不起作用。
我需要它从 "最大余额 "的时刻开始计算亏损的交易,以关闭所有盈利的交易,因为它们达到的利润超过了整个损失,并在新的存款中重新开始计算亏损的交易。
有没有人见过一个专家顾问可以跟踪存款余额,例如,交易开始时余额为50......损失开始时,专家顾问应该记住余额下降了多少,以便在下一次未结头寸 的利润超过这一损失时,它应该关闭所有盈利的交易,并重新开始计算损失。
我如何知道最后的1-2-3订单是否丢失?
我怎么知道最后一个订单是什么?
例如,我需要知道一个挂起的买入限价是否触发,如果触发了,在什么价位,然后放置一个新的。
我如何知道订单是否已经触发了追踪止损,然后在追踪止损被触发后再下新的订单?