Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены
как зафиксировать максимум и присвоить его переменной.
double Прибыль=0; // Глобальная переменная void OnTick() { double НоваяПрибыль=OrderProfit()+OrderSwap()+OrderCommission(); if(НоваяПрибыль>Прибыль) Прибыль=НоваяПрибыль;
Собственно столкнулся с такой проблемой
Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены
Задача вот в чемб как зафиксировать максимум и присвоить его переменной.
Пробовал простым = , но значение все равно меняется.
Собственно столкнулся с такой проблемой
Есть прибыль, она постоянно меняется в зависимости от цены
Задача вот в чемб как зафиксировать максимум и присвоить его переменной.
Пробовал простым = , но значение все равно меняется.
На глобальном уровне назначить переменную, далее в неё будем писать профит. Когда нет позиций - обнулять.
double ProfitMax; double Profit=OrderProfit()+OrderSwap()+OrderCommission(); if(Profit>ProfitMax) ProfitMax=Profit; if(OrderTotal()==0) ProfitMax=0;
P.S. Пока писал - 2 ответа)
P.S 2. Правил сообщение, и сбился код - сайт подглючивает(
Спасибо помогло, я в глобальную не объявил у меня результат и прыгал.
Теперь вот другая проблема закрываются не все ордера, а только те у которых профит +, что надо поправить чтобы одновременно все закрывалися
int Ticketb=0,Tickets=0,Ticketbs=0,Ticketss=0;
int b=0,s=0,bs=0,ss=0,tip;
double ProfitB=0,price_b=0,LB=0,ProfitBS=0,price_bs=0,LSS=0,NLb=0,NLbP=0;
double ProfitS=0,price_s=0,LS=0,ProfitSS=0,price_ss=0,LBS=0,NLs=0,NLsP=0;
double lot=0,max=0,min=0,max2=0;
double ProfitMaxpr=0;
for(int z=0; z<OrdersTotal(); z++)
{
if(OrderSelect(z,SELECT_BY_POS,MODE_TRADES ))
{
tip = OrderType();
if((OrderSymbol()==Symbol() && Magic==OrderMagicNumber()) || tip==0 )
{
double step = MarketInfo(Symbol(), MODE_TICKVALUE);
lot = OrderLots();
OOTb=OrderOpenTime();
OOTs=OrderOpenTime();
OOTbs=OrderOpenTime();
OOTss=OrderOpenTime();
OOPB = NormalizeDouble(OrderOpenPrice(),Digits);
OOPS = NormalizeDouble(OrderOpenPrice(),Digits);
OOPBS = NormalizeDouble(OrderOpenPrice(),Digits);
OOPSS = NormalizeDouble(OrderOpenPrice(),Digits);
double OSLB=OrderStopLoss();
if(tip==OP_BUY ) {ProfitB+=OrderProfit()+OrderSwap()+OrderCommission(); price_b+=OOPB*lot; LB+=lot; b++; Ticketb=OrderTicket();}
if(tip==OP_SELL) {ProfitS+=OrderProfit()+OrderSwap()+OrderCommission(); price_s+=OOPS*lot; LS+=lot; s++; Tickets=OrderTicket();
if(ProfitS>ProfitMax) {ProfitMax=ProfitS;ProfitMaxpr=ProfitMax*Procent;
if(ProfitMax>=ProfitMaxpr+step)
OrderClose(Tickets,OrderLots(),NormalizeDouble(Ask,Digits),Slippage);
}
if(OrdersTotal()==0) ProfitMax=0;
DrawLABEL(1,"Allmaxs",StringConcatenate(ProfitS," ProfitS ",ProfitSmax," ProfitSmax ",step," step "),10,50,clrLime);
}
if(tip==OP_BUYSTOP ) {ProfitBS+=OrderProfit()+OrderSwap()+OrderCommission(); price_bs+=OOPBS*lot; LBS+=lot; bs++; Ticketbs=OrderTicket();}
if(tip==OP_SELLSTOP) {ProfitSS+=OrderProfit()+OrderSwap()+OrderCommission(); price_ss+=OOPSS*lot; LSS+=lot; ss++; Ticketss=OrderTicket();}
}
}
}
CrazyGreedBoss:
Теперь вот другая проблема закрываются не все ордера, а только те у которых профит +, что надо поправить чтобы одновременно все закрывалися
необходимо входить в цикл (при помощи - while
bool closesell=false; while(!closesell && !IsStopped() && !YES_SELL()) if(closesell==OrderClose(OrderTicket(),OrderLots(),Ask,0,clrNONE)==true) if(!YES_SELL()){closesell=false;break;}
) при наступлении условия для закрытия ордеров и выполнять до тех пор пока все ордера не закроются. Ну и примерно так проверять есть ещё ордера или нет
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool YES_SELL() { bool Exist=true; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL){Exist=false;break;} } } } return(Exist); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Собственно столкнулся с такой проблемой
Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены
Задача вот в чемб как зафиксировать максимум и присвоить его переменной.
Пробовал простым = , но значение все равно меняется.