Нужна помощь в написании

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
CrazyGreedBoss
69
CrazyGreedBoss  

Собственно столкнулся с такой проблемой

Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены

Задача вот в чемб как зафиксировать максимум и присвоить его переменной.

Пробовал простым = , но значение все равно меняется.

Konstantin Erin
2166
Konstantin Erin  
CrazyGreedBoss:
Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены
как зафиксировать максимум и присвоить его переменной.
double Прибыль=0;  // Глобальная переменная
void OnTick()
{
  double НоваяПрибыль=OrderProfit()+OrderSwap()+OrderCommission();
  if(НоваяПрибыль>Прибыль) Прибыль=НоваяПрибыль;
Artyom Trishkin
Модератор
53541
Artyom Trishkin  
CrazyGreedBoss:

Собственно столкнулся с такой проблемой

Есть прибыль OrderProfit()+OrderSwap()+OrderCommission(), она постоянно меняется в зависимости от цены

Задача вот в чемб как зафиксировать максимум и присвоить его переменной.

Пробовал простым = , но значение все равно меняется.

1. Запомнить профит.
2. На каждом тике проверять профит. 
2.1. Если профит больше запомненного, запомнить профит.
Vitaly Muzichenko
13952
Vitaly Muzichenko  
CrazyGreedBoss:

Собственно столкнулся с такой проблемой

Есть прибыль, она постоянно меняется в зависимости от цены

Задача вот в чемб как зафиксировать максимум и присвоить его переменной.

Пробовал простым = , но значение все равно меняется.

На глобальном уровне назначить переменную, далее в неё будем писать профит. Когда нет позиций - обнулять.

double ProfitMax;

double Profit=OrderProfit()+OrderSwap()+OrderCommission();
 if(Profit>ProfitMax) ProfitMax=Profit;
 if(OrderTotal()==0) ProfitMax=0;

P.S. Пока писал - 2 ответа)

P.S 2. Правил сообщение, и сбился код - сайт подглючивает( 

CrazyGreedBoss
69
CrazyGreedBoss  

Спасибо помогло, я в глобальную не объявил у меня результат и прыгал.

Теперь вот другая проблема закрываются не все ордера, а только те у которых профит +, что надо поправить чтобы одновременно все закрывалися

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();}
           }
        }
     }


Vladimir Deryagin
590
Vladimir Deryagin  

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);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий