Блог им. vldtar

Исходный код рабочего торгового робота на mql4

//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property version   "1.00"
//+------------------------------------------------------------------+
input double    Risk             =1;         //          //
input double    Exponenta        =1.3;
input double    TPproc           =0.2;
input int       Step             =5; 
input int       n                =100; 
input int       Magic            =2017; 
//+------------------------------------------------------------------+
string comment ="System";
int r, D;
datetime NewBar =0;
double NewLot;
//+------------------------------------------------------------------+
int OnInit(){
D=1;
if (Digits==5 || Digits==3)D=10;
return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){}
//+------------------------------------------------------------------+
void OnTick(){
//+------------------------------------------------------------------+
double Lot=0;
Lot=NormalizeDouble(AccountBalance()/100*Risk/(MarketInfo(Symbol(),MODE_TICKVALUE)*100*D),2);
if (Lot<MarketInfo(Symbol(),MODE_MINLOT))Lot=MarketInfo(Symbol(),MODE_MINLOT);
//+------------------------------------------------------------------+
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01) int dig =2;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.10)     dig =1;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==1.00)     dig =0;
//+------------------------------------------------------------------+
if(NewBar!= iTime(Symbol(),0,0) ) 
{NewBar = iTime(Symbol(),0,0) ;
//+------------------------------------------------------------------+
bool Sell=false; bool Buy=false;
if(Open[n+1]<Close[n+1] && Open[n]<Close[n]) {Buy=true;}
if(Open[n+1]>Close[n+1] && Open[n]>Close[n]) {Sell=true;}
//+------------------------------------------------------------------+
bool minus=false, plus=false;

if(LastProfit()<0)
{minus=true;}
if(LastProfit()>=0)
{plus=true;}
//+------------------------------------------------------------------+
if(plus || CountH(-1)==0)
{NewLot=Lot;}

if(minus && CountH(-1)>0)
{NewLot=NormalizeDouble(LastLot()*Exponenta, dig);}
//+------------------------------------------------------------------+
double P_Max=(AccountBalance()/100)*TPproc;

if(Count(OP_SELL)==0 && Sell && LastType()!=OP_SELL && (Profit(OP_BUY)>P_Max*Count(OP_BUY) || CountH(-1)==0))
  {r=OrderSend(Symbol(),OP_SELL,NewLot,Bid,10,0,0,comment,Magic,0,Red);
  CloseBuy();}
if(Count(OP_BUY)==0 && Buy && LastType()!=OP_BUY && (Profit(OP_SELL)>P_Max*Count(OP_SELL) || CountH(-1)==0))
  {r=OrderSend(Symbol(),OP_BUY,NewLot,Ask,10,0,0,comment,Magic,0,Green);
  CloseSell();}
//+------------------------------------------------------------------+
if(Count(OP_BUY)>0 && Ask+Step*D*Point<=BuyPric())
   {r=OrderSend(Symbol(),OP_BUY,NewLot,Ask,10,0,0,comment,Magic,0,Green);}  
if(Count(OP_SELL)>0 && Bid-Step*D*Point>=SellPric())
   {r=OrderSend(Symbol(),OP_SELL,NewLot,Bid,10,0,0,comment,Magic,0,Red);}
//+------------------------------------------------------------------+
}}
//+------------------------------------------------------------------+ 
//| Считаем количество ордеров по типу                               | 
//+------------------------------------------------------------------+ 
int Count(int type)
{int count=0;
 for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && Magic==OrderMagicNumber() && (type==-1 || OrderType()==type)) count++;}
   return(count);}
//+------------------------------------------------------------------+ 
//| Функция закрытия ордеров                                         |
//+------------------------------------------------------------------+
void CloseBuy()
{double priceB;
for(int i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(Symbol()==OrderSymbol() && OrderType()==OP_BUY && Magic==OrderMagicNumber())
{priceB=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID), Digits);
bool clos=OrderClose(OrderTicket(),OrderLots(),priceB,100,0);}}}
return;}
//+------------------------------------------------------------------+
void CloseSell()
{double priceS;
for(int i=OrdersTotal()-1;i>=0;i--)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{if(Symbol()==OrderSymbol() && OrderType()==OP_SELL && Magic==OrderMagicNumber())
{priceS=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK), Digits);
bool clos=OrderClose(OrderTicket(),OrderLots(),priceS,100,0);}}}
return;}
//+------------------------------------------------------------------+ 
//| Определяем тип последнего ордера                                 | 
//+------------------------------------------------------------------+ 
int LastType()
{int type=-1;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();}}}
return(type);}
//+------------------------------------------------------------------+ 
//| Определяем лот последнего ордера                                 | 
//+------------------------------------------------------------------+ 
double LastLot()
{int type=-1;
double lots;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();
    lots=OrderLots();}}}
return(lots);}
//+------------------------------------------------------------------+ 
//| Определяем профит последнего ордера                                 | 
//+------------------------------------------------------------------+ 
double LastProfit()
{int type=-1;
double profit;
datetime dt=0;
for(int i=OrdersTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {if(Symbol()==OrderSymbol() && OrderMagicNumber()==Magic) 
   {if(OrderOpenTime()>dt)
   {dt=OrderOpenTime();
    type=OrderType();
    profit=OrderProfit();}}}
return(profit);}
//+------------------------------------------------------------------+ 
//| Определяем цену последнего ордера бай                            | 
//+------------------------------------------------------------------+ 
double BuyPric() {
   double oldorderopenprice;
   int oldticketnumber;
   double unused = 0;
   int ticketnumber = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      bool clos=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) {
         oldticketnumber = OrderTicket();
         if (oldticketnumber > ticketnumber) {
            oldorderopenprice = OrderOpenPrice();
            unused = oldorderopenprice;
            ticketnumber = oldticketnumber;}}}
   return (oldorderopenprice);}
//+------------------------------------------------------------------+ 
//| Определяем цену последнего ордера селл                           | 
//+------------------------------------------------------------------+ 
double SellPric() {
   double oldorderopenprice;
   int oldticketnumber;
   double unused = 0;
   int ticketnumber = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      bool clos=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) {
         oldticketnumber = OrderTicket();
         if (oldticketnumber > ticketnumber) {
            oldorderopenprice = OrderOpenPrice();
            unused = oldorderopenprice;
            ticketnumber = oldticketnumber;}}}
   return (oldorderopenprice);}
//+------------------------------------------------------------------+ 
int CountH(int type)
{int count=0;
 for(int i=OrdersHistoryTotal()-1;i>=0;i--)
 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
  {if(Symbol()==OrderSymbol() && Magic==OrderMagicNumber() && (type==-1 || OrderType()==type)) count++;}
   return(count);}
//--------------------------------------------------------------------+
double Profit(int type) 
{double Profit = 0;
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {if (Symbol()==OrderSymbol() && OrderMagicNumber()==Magic && (OrderType() == type || type==-1)) Profit += OrderProfit()+OrderSwap()+OrderCommission();}}
       return (Profit);} 
450 | ★1
3 комментария
Спасибо, беру кредит
Зачем так сложно? Просто дайте советник, а народ протестирует.
Спасибо.
avatar

Читайте на SMART-LAB:
Рубль под давлением: какие активы под угрозой?
Ставка падает, рубль слабеет — это новая экономическая реальность или временный эффект? Разбираем, что на самом деле происходит с бюджетом и...
Фото
Акции RENI в списке ТОП-10 лучших дивидендных акций, по мнению УК ««ДОХОДЪ»
По сообщениям СМИ, акции Группы Ренессанс страхование (RENI) вошли в подборку Управляющей компании ««ДОХОДЪ» ТОП-10 лучших дивидендных акций с...
Акции газовой отрасли РФ растут на фоне дефицита СПГ
Сегодня на фоне слабого роста российского фондового рынка динамику намного лучше рынка демонстрируют акции газовой отрасли. Так, акции Газпрома...
Фото
X5 МСФО 2025 г. - капзатрат меньше, дивиденд больше?
Компания X5 опубликовала финансовые результаты за 2025 год. Выручка прибавила +18,8% до 4,6 трлн руб., в 4-м квартале рост на 14,9% до 1,24...

теги блога Чувак Хачинбек ✔️

....все тэги



UPDONW
Новый дизайн