欢迎光临
我们一直在努力

分离复杂逻辑,以模块化编程思维实现实现层和调用层分离的编程思想

什么是组件化开发?

  1. 前端调用层和后端实现层的解耦
  2. 可拔插式程序设计,整体程序逻辑不会崩塌
  3. 有效的减少BUG错误和逻辑错误产生
  4. 具有复用性
  5. 提高编程效率

止损止盈价格趋势线

代码实现

// 验证单词: validator
// 1交易品种验证组件
bool valSymbol(const string symbol)
{
  // 保留接口位置
  string m_sym = "";
  if(symbol == NULL || symbol == "") m_sym = _Symbol;
  else m_sym = symbol;
  bool sym = SymbolSelect(m_sym, true);
  return sym;
}
// 2交易品种验证组件
bool valType(const int type)
{
    if(type < 0 || type > 1) return false;
    return true;
}
// 3 验证交易手数组件
double valVolume(const string symbol, const double volume)
{
  // 获取交易品种最小下单量
  double min_vol = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
  // 判断用户输入的值是否合法
  if(volume <= min_vol) return NormalizeDouble(min_vol, 2);
  // 如果用户输入大于最大手数
  double max_vol = SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
  if(volume > max_vol) return NormalizeDouble(min_vol, 2);
  else return volume;
}

//4 验证止损价组件
double valStopLossPrice(const string symbol,const int type, const double price, const int sl)
{
  // 拦截非法数据
  if(price <= 0.0 || sl <= 0) return 0.0;
  SymbolInfo sym_info;
  getSymbolInfo(symbol,sym_info);
  
  double sl_price = 0.0;
  if(type == 0)
  { 
    double sl_level = NormalizeDouble(price - sl * sym_info.point, sym_info.digits);
    double ask_level = NormalizeDouble(sym_info.ask - sym_info.stops_level * sym_info.point, sym_info.digits);
    if(sl_level <= ask_level) sl_price = sl_level;
      
  }
  else if(type == 1)
  {
    double sl_level = NormalizeDouble(price + sl * sym_info.point, sym_info.digits);
    double bid_level = NormalizeDouble(sym_info.bid + sym_info.stops_level * sym_info.point, sym_info.digits);
    if(sl_level >= bid_level) sl_price = sl_level;
      
  }
  return sl_price;
}

//5 验证止赢价组件
double valSLTPPrice(const string symbol, const int type, const int points, const int up_dwon)
{
  if(points <= 0.0) return 0.0;
  double ask = SymbolInfoDouble(symbol,SYMBOL_ASK);
  double bid = SymbolInfoDouble(symbol,SYMBOL_BID);
  double m_value = 0.0;
  if(type == 0)
  {
    if(up_dwon == 0)m_value = valStopLossPrice(symbol,type,ask,points);
    else if(up_dwon == 1)m_value = valTakeProfitPrice(symbol,type,ask,points);
  }
  if(type == 1)
  {
    if(up_dwon == 0)m_value = valStopLossPrice(symbol,type,bid,points);
    else if(up_dwon == 1)m_value = valTakeProfitPrice(symbol,type,bid,points);
  }
  return m_value;
}

// 6 验证滑点组件
int valDeviation(const int dev)
{
  if(dev < 5) return 5;
  return dev;
}

调用组件

bool PositionSend(const string symbol, // 交易品种 1
                  const int type, // 定单方向 2
                  const double volume, // 定单手数 3
                  const int sl, // 止损价 4
                  const int tp, // 止盈价 5
                  const int deviation, // 滑点 6
                  const string comment, // 定单注释 7
                  const ulong magic // EA识别码 8
                  
)
{
  // 组装组件
  if(valSymbol(symbol) == true)
  {
    double ask = SymbolInfoDouble(symbol,SYMBOL_ASK);
    double bid = SymbolInfoDouble(symbol,SYMBOL_BID);
    // double m_vol = volume;
    double m_vol = valVolume(symbol, volume);
    double m_sl = 0.0; double m_tp = 0.0;
    if(type == 0)
    {
      m_sl = valStopLossPrice(symbol,type,ask,sl);
      m_tp = valTakeProfitPrice(symbol,type,ask,tp);
    }
    else if(type == 1)
    {
      m_sl = valStopLossPrice(symbol,type,bid,sl);
      m_tp = valTakeProfitPrice(symbol,type,bid,tp);
    }
    int m_dev = valDeviation(deviation);
    bool is_ok = PositionSendBase(symbol,type,m_vol,m_sl,m_tp,m_dev,comment,magic);
    if(is_ok) return true;
    
  }
  return false;
}

前端用户体验

void OnStart()
  {
    // printf("buy type: %d, sell type: %d", ORDER_TYPE_BUY, ORDER_TYPE_SELL);
    //PositionSend(_Symbol, 0, 0.01, 100, 200, 5, "buy + 1", 819921);
    PositionSend(_Symbol, 1, 0.11, 150, 150, -5, "sell + 1", 819921);
  }
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:瓜皮猫量化编程 »
分享到: 生成海报

评论 抢沙发

瓜皮猫量化交易编程

QQ群: 492653640微信: guapitcom
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活