开仓之后的最高价和最低价如何写?谢谢!

Discussion in 'MetaTrader' started by shanghai8888, Jun 30, 2012.

  1. 开仓之后的最高价和最低价如何写?谢谢!
     
  2. 先计算开仓以来的时间,再换算为时间周期的数目,在获得这期间内的高低点位置(数组下标),再获得值
     
  3. int shift = iBarShift(NULL,0,OrderOpenTime());
    //以该仓位的开仓时间搜索当前K线偏移值
    if(shift >= 0 )
    high_price =High[iHighest(NULL,0,MODE_HIGH, shift)];

    if(shift >=0)
    low_price =Low[iLowest(NULL,0,MODE_LOW, shift)];
     
  4. 非常感谢楼上两位!周末愉快!
     
  5. 这个是MT4吧,请问用MT5如何表达开仓后的最高价与最低价,谢谢!

    这个是MT4吧,请问用MT5如何表达开仓后的最高价与最低价,谢谢!
     
  6. 找来的一个,不知道对不对。好像是mt4的。
    http://www.zhinengjiaoyi.com/thread-107-1-1.html

    int start()
    {
    datetime a;
    for(int i=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
    a= OrderOpenTime();
    }
    }
    Print("开仓到现在的最高价:"+High[iHighest(NULL,0,MODE_HIGH,iBarShift(Symbol(),0,a),0)]);
    Print("开仓到现在的最低价:"+Low[iLowest(NULL,0,MODE_LOW,iBarShift(Symbol(),0,a),0)]);
    Print("开仓时间"+TimeToStr(OrderOpenTime(),TIME_DATE|TIME_SECONDS));
    return(0);
    }
    这是老师批改后正确的脚本。
     
  7. 谢谢!经常看到你的帖子,我没了解过MT4,工作又较忙,所以想直接研究MT5,等有券商支持时我能掌握(哈哈,要几年的)......因为我的思路里好多是根据最高价/最低价回撤来定的过程控制,所以这个不解决,也很头痛,人笨工作又忙,自学到毕业估计时间短不了..........
     
  8. mt5就是c++,熟悉c++就没问题,不熟悉就麻烦些,可以参看这个国外的站点。
    http://fxdreema.com/
     
  9. 非常感谢!
     
  10. 道理是一样的吧,我也是MT5新手,刚学习了两天,练习中....

    Code:
    
    double HighestPriceSinceEntry(string symbol,ENUM_TIMEFRAMES TF,datetime orderopentime)
    {
      double highprice[];
      datetime time[];
      int MaxAnalyze = 1000;
      int shift = -1;
      double price;
      ArraySetAsSeries(highprice,true);
      ArraySetAsSeries(time,true);
      int copiesTime = CopyTime(symbol,TF,0,MaxAnalyze,time);
      int Copieshigh = CopyHigh(symbol,TF,0,MaxAnalyze,highprice);
      if(copiesTime <0 ||Copieshigh<0) {Print("copy rates error");return(-1);}
      shift = ArrayBsearch(time,orderopentime);
      if(shift>=0)
        price= highprice[ArrayMaximum(highprice,0,shift)];
      return(price);
    }
    
    void test()
    {
    
       for(i=0;i<PositionsTotal();i++)
         {
          if(Symbol()==PositionGetSymbol(i))
            {
             double HighPrice=HighestPriceSinceEntry(Symbol(),PERIOD_M5 ,PositionGetInteger(POSITION_TIME));
             Print("price since entry :",HighPrice);
            }
         } 
    }
    
     
  11. 谢谢!
     
  12. 能不能做个通用的“跟踪止损”?虽然mt5客户端支持,但没有ea方式的。
     
  13. 网上找的代码,可以试验一下
    Code:
    
    input int TS        = 50;    //  trail Stop Loss
    MqlTradeRequest request;
    MqlTradeResult result;
    double Ask,Bid,sl;
    int Spread;
    double Lots;
    ulong StopLevel;
    int i;
    
    
    void trail()
    {
    
       Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
       Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
       Spread=int(SymbolInfoInteger(_Symbol,SYMBOL_SPREAD));
       StopLevel=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL);
    
    //--- trailing position  
       for(i=0;i<PositionsTotal();i++)
         {
          if(Symbol()==PositionGetSymbol(i))
            {
             if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
               {
                sl=MathMax(PositionGetDouble(POSITION_PRICE_OPEN)+Spread*_Point,Bid-TS*_Point);
    
                if(sl>PositionGetDouble(POSITION_SL) && (Bid-StopLevel*_Point-Spread*_Point)>PositionGetDouble(POSITION_PRICE_OPEN))
                  {
                   request.action = TRADE_ACTION_SLTP;
                   request.symbol = _Symbol;
                   request.sl = NormalizeDouble(sl,_Digits);
                   request.tp = PositionGetDouble(POSITION_TP);
                   OrderSend(request,result);
                   if(result.retcode==10009 || result.retcode==10008) // request executed
                      Print("Moving Stop Loss of Buy position #",request.order);
                   else
                     {
                      Print(ResultRetcodeDescription(result.retcode));
                      return;
                     }
                   return;
                  }
               }
    
             if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
               {
                sl=MathMin(PositionGetDouble(POSITION_PRICE_OPEN)-Spread*_Point,Ask+TS*_Point);
    
                if(sl<PositionGetDouble(POSITION_SL) && (PositionGetDouble(POSITION_PRICE_OPEN)-StopLevel*_Point-Spread*_Point)>Ask)
                  {
                   request.action = TRADE_ACTION_SLTP;
                   request.symbol = _Symbol;
                   request.sl = NormalizeDouble(sl,_Digits);
                   request.tp = PositionGetDouble(POSITION_TP);
                   OrderSend(request,result);
                   if(result.retcode==10009 || result.retcode==10008) // request executed
                      Print("Moving Stop Loss of Sell position #",request.order);
                   else
                     {
                      Print(ResultRetcodeDescription(result.retcode));
                      return;
                     }
                   return;
                  }
               }
            }
         }
    }
    
    
    //+------------------------------------------------------------------+
    //| ResultRetcodeDescription                                         |
    //+------------------------------------------------------------------+
    string ResultRetcodeDescription(int retcode)
      {
       string str;
    
       switch(retcode)
         {
          case TRADE_RETCODE_REQUOTE:
             str="Requote";
             break;
          case TRADE_RETCODE_REJECT:
             str="Request rejected";
             break;
          case TRADE_RETCODE_CANCEL:
             str="Request canceled by trader";
             break;
          case TRADE_RETCODE_PLACED:
             str="Order placed";
             break;
          case TRADE_RETCODE_DONE:
             str="Request executed";
             break;
          case TRADE_RETCODE_DONE_PARTIAL:
             str="Request partially executed";
             break;
          case TRADE_RETCODE_ERROR:
             str="Request processing error";
             break;
          case TRADE_RETCODE_TIMEOUT:
             str="Request canceled because of time out";
             break;
          case TRADE_RETCODE_INVALID:
             str="Invalid request";
             break;
          case TRADE_RETCODE_INVALID_VOLUME:
             str="Invalid request volume";
             break;
          case TRADE_RETCODE_INVALID_PRICE:
             str="Invalid request price";
             break;
          case TRADE_RETCODE_INVALID_STOPS:
             str="Invalid request stops";
             break;
          case TRADE_RETCODE_TRADE_DISABLED:
             str="Trade disabled";
             break;
          case TRADE_RETCODE_MARKET_CLOSED:
             str="Market is closed";
             break;
          case TRADE_RETCODE_NO_MONEY:
             str="Insufficient funds for request execution";
             break;
          case TRADE_RETCODE_PRICE_CHANGED:
             str="Prices changed";
             break;
          case TRADE_RETCODE_PRICE_OFF:
             str="No quotes for request processing";
             break;
          case TRADE_RETCODE_INVALID_EXPIRATION:
             str="Invalid order expiration date in request";
             break;
          case TRADE_RETCODE_ORDER_CHANGED:
             str="Order state changed";
             break;
          case TRADE_RETCODE_TOO_MANY_REQUESTS:
             str="Too many requests";
             break;
          case TRADE_RETCODE_NO_CHANGES:
             str="No changes in request";
             break;
          case TRADE_RETCODE_SERVER_DISABLES_AT:
             str="Autotrading disabled by server";
             break;
          case TRADE_RETCODE_CLIENT_DISABLES_AT:
             str="Autotrading disabled by client terminal";
             break;
          case TRADE_RETCODE_LOCKED:
             str="Request blocked for processing";
             break;
          case TRADE_RETCODE_FROZEN:
             str="Order or position frozen";
             break;
          case TRADE_RETCODE_INVALID_FILL:
             str="Unsupported type of order execution for balance is specified";
             break;
          case TRADE_RETCODE_CONNECTION:
             str="No connection to the trading server";
             break;
          case TRADE_RETCODE_ONLY_REAL:
             str="Operation is allowed only for real accounts";
             break;
          case TRADE_RETCODE_LIMIT_ORDERS:
             str="Number of pending orders reached the limit";
             break;
          case TRADE_RETCODE_LIMIT_VOLUME:
             str="Volume of orders and positions for this symbol reached the limit";
             break;
    
          default:
             str="Unknown result";
         }
    
       return(str);
      }
    //+------------------------------------------------------------------+  
    
    
     
  14. 谢谢!周末愉快!
     
  15. 谢谢,学习一下.