新手入坑,大佬们帮我看看怎么回事

 

如题,新手入坑,自己随便写了个交易策略,测试时一直报10013,大佬们帮忙看看

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// 获取前1小时的最高价和最低价
   datetime start = iTime(_Symbol, PERIOD_H1, 1);
   datetime end = iTime(_Symbol, PERIOD_H1, 0);

// 创建一个临时数组来存储最高价和最低价
   double highArray[];
   double lowArray[];

// 从历史数据中复制最高价和最低价到临时数组
   ArraySetAsSeries(highArray, true);
   ArraySetAsSeries(lowArray, true);
   CopyHigh(_Symbol, PERIOD_H1, start, 2, highArray);
   CopyLow(_Symbol, PERIOD_H1, start, 2, lowArray);

   double high = highArray[1];
   double low = lowArray[1];

// 获取当前价位
   double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);

// 判断是否在前1小时高点上下1元范围内
   if(currentPrice >= high - 1.0 && currentPrice <= high + 1.0)
     {
      // 随机生成买卖方向
      int randomDirection = MathRand() % 2;  // 0表示卖单,1表示买单

      // 设置交易请求参数
      MqlTradeRequest request;
      MqlTradeResult result;
      ZeroMemory(request);
      ZeroMemory(result);
      request.symbol = _Symbol;
      // 设置交易量(最小交易量的倍数)
      request.volume = 0.1;
      request.action = "TRADE_ACTION_DEAL";
      //价格偏差
      request.deviation = 0.4;
      request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      Print("当前卖价:", request.price);
      if(randomDirection == 0)
        {
         // 卖单
         request.type = "TRADE_ACTION_SELL";
         request.sl = request.price + 3.0;  // 设置止损为开仓价加上300点
         request.tp = request.price - 5.0;  // 设置止盈为开仓价减去500点
        }
      else
        {
         // 买单
         request.type = "TRADE_ACTION_BUY";
         request.sl = request.price - 3.0;  // 设置止损为开仓价减去300点
         request.tp = request.price + 5.0;  // 设置止盈为开仓价加上500点
        }
      Print("当前止损:", request.sl);
      Print("当前止盈:", request.tp);
      request.type_filling = ORDER_FILLING_RETURN;

      // 执行交易请求
      if(OrderSend(request, result))
        {
         // 交易请求执行成功
         Print(randomDirection == 0 ? "卖单已下单" : "买单已下单");
        }
      else
        {
         // 交易请求执行失败
         Print(randomDirection == 0 ? "卖单下单失败,错误代码:" : "买单下单失败,错误代码:", result.retcode);
        }
     }
  }
//+------------------------------------------------------------------+
附加的文件:
2ts6.png  31 kb
 
guojing8519:

如题,新手入坑,自己随便写了个交易策略,测试时一直报10013,大佬们帮忙看看

你要在草稿上划两个报价,一个是Ask,一个是Bid,Ask在上面,Bid在下面,Ask永远大于Bid,这是最基本的知识,然后记住,开仓时,买入的时候使用Ask报价,卖出的时候使用Bid报价,平仓时要反过来,买仓平仓使用Bid报价,卖仓平仓使用Ask报价,这样才形成了交易商的价差手续费,你不能买卖都使用同一个报价!祝你好运。
 
hbsbill #:
你要在草稿上划两个报价,一个是Ask,一个是Bid,Ask在上面,Bid在下面,Ask永远大于Bid,这是最基本的知识,然后记住,开仓时,买入的时候使用Ask报价,卖出的时候使用Bid报价,平仓时要反过来,买仓平仓使用Bid报价,卖仓平仓使用Ask报价,这样才形成了交易商的价差手续费,你不能买卖都使用同一个报价!祝你好运。
谢谢大佬