UT Bot Alerts by QuantNomad

UT Bot Alerts by QuantNomad-EA侦探社 - 全球领先的MQL5官网外汇EA机器人MT4自动化交易EA资源免费分享网站
UT Bot Alerts by QuantNomad
此内容为免费资源,请登录后查看
0积分
免费资源

如果免费资源下载的文件为TXT文档

请联系站长更新!站长微信:Lv596999  Telegram:@eapoj

“Mql5官网”板块的EA基本都有,大部分是无限制NODLL版,NODLL版本MT1420升级,大多数不可用!这些EA来源为国外花钱买过来的

有需要,请联系站长!

“EA测评”板块资源全部现有,看见不错的,可以联系站长看EA在确定是否收费

“无限制EA”板块,大部分免费,下载文件全部存在,都可以免费下载

站长硬盘EA太多,因大部分时间做交易,做风控,没太多时间更新下载地址,请谅解!

需要更新下载文件,请联系站长微信!国外朋友请联系Telegram。


To get access to MT4 version please click here.

  • This is the exact conversion from TradingView: “UT Bot Alerts” by “QuantNomad”.
  • This is a light-load processing and non-repaint indicator.
  • Buffers are available for processing in EAs.
  • You can message in private chat for further changes you need.

Here is the source code of a simple Expert Advisor operating based on signals from UT Bot Alerts.

#include <Trade\Trade.mqh>
CTrade trade;
int handle_utbot=0;

input group "EA Setting"
input int magic_number=123456; //magic number
input double fixed_lot_size=0.01; // select fixed lot size

input group "UTBOT setting"
input double a = 1; //Key Vaule
input int c = 10; //ATR Period
input bool h = false; //Signals from Heikin Ashi Candles

int OnInit()
  {
   trade.SetExpertMagicNumber(magic_number);
   handle_utbot=iCustom(_Symbol, PERIOD_CURRENT, "Market/UT Bot Alerts by QuantNomad", a, c, h);
   if(handle_utbot==INVALID_HANDLE) 
   {
      Print("Indicator not found!");
      return INIT_FAILED;
   }
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorRelease(handle_utbot);
  }

void OnTick()
  {
   if(!isNewBar()) return;
   ///////////////////////////////////////////////////////////////////
   bool buy_condition=true;
   buy_condition &= (BuyCount()==0);
   buy_condition &= (IsUTBOTBuy(1));
   if(buy_condition) 
   {
      CloseSell();
      Buy();
   }
      
   bool sell_condition=true;
   sell_condition &= (SellCount()==0);
   sell_condition &= (IsUTBOTSell(1));
   if(sell_condition) 
   {
      CloseBuy();
      Sell();
   }
  }

bool IsUTBOTBuy(int i)
{
   double array[];
   ArraySetAsSeries(array, true);
   CopyBuffer(handle_utbot, 6, i, 1, array);
   return array[0]!=EMPTY_VALUE;
}

bool IsUTBOTSell(int i)
{
   double array[];
   ArraySetAsSeries(array, true);
   CopyBuffer(handle_utbot, 7, i, 1, array);
   return array[0]!=EMPTY_VALUE;
}

int BuyCount()
{
   int buy=0;
   for(int i=0;i<PositionsTotal();i++)
   {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_BUY) continue;
      if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue;
      buy++;
   }  
   return buy;
}

int SellCount()
{
   int sell=0;
   for(int i=0;i<PositionsTotal();i++)
   {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_SELL) continue;
      if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue;
      sell++;
   }  
   return sell;
}


void Buy()
{
   double Ask=SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   if(!trade.Buy(fixed_lot_size, _Symbol, Ask, 0, 0, ""))
   {
      Print("Error executing order: ", GetLastError());
      //ExpertRemove();
   }
}

void Sell()
{
   double Bid=SymbolInfoDouble(_Symbol, SYMBOL_BID);
   if(!trade.Sell(fixed_lot_size, _Symbol, Bid, 0, 0, ""))
   {
      Print("Error executing order: ", GetLastError());
      //ExpertRemove();
   }
}


void CloseBuy()
{
   for(int i=PositionsTotal()-1;i>=0;i--)
   {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_BUY) continue;
      if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue;
      if(trade.PositionClose(ticket)==false)
      {
         Print("Error closing position: ", GetLastError());
         //ExpertRemove();
      }
   }  
}

void CloseSell()
{
   for(int i=PositionsTotal()-1;i>=0;i--)
   {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_TYPE) != POSITION_TYPE_SELL) continue;
      if(PositionGetInteger(POSITION_MAGIC) != magic_number) continue;
      if(trade.PositionClose(ticket)==false)
      {
         Print("Error closing position: ", GetLastError());
         //ExpertRemove();
      }
   }  
}

datetime timer=NULL;
bool isNewBar()
{
   datetime candle_start_time= (int)(TimeCurrent()/(PeriodSeconds()))*PeriodSeconds();
   if(timer==NULL) {}
   else if(timer==candle_start_time) return false;
   timer=candle_start_time;
   return true;
}

© 版权声明
THE END
喜欢就支持一下吧
点赞32 分享
相关推荐