gpt4 book ai didi

mql4 - 我如何在另一笔未平仓交易时取消交易并在给定持续时间内保持未平仓交易?

转载 作者:行者123 更新时间:2023-12-03 20:53:04 27 4
gpt4 key购买 nike

我编写了下面的代码,用于在特定时间打开买卖交易(高于和低于卖出价和买入价的特定点数)。

  • 如何在打开另一个时立即关闭/取消一个?
  • 如果说盈利 X 点或一分钟后(取决于首先达到哪个条件),我该如何关闭已开仓交易?

  • 我不太确定我在下面的代码中做了正确的事情,非常感谢一些帮助。
    double spread = Ask-Bid;
    extern datetime time;
    extern int pipGap = 7;
    extern int lotSize = 0.01;
    extern int closeTimeInSeconds = 60;


    int start() {
    if (TimeCurrent() >= StrToTime(time)){

    OrderSend(Symbol(),OP_BUYSTOP,lotSize, Ask + Point*pipGap, 0,0,0);
    OrderSend(Symbol(),OP_SELLSTOP,lotSize, Bid - Point*pipGap, 0,0,0);


    }


    for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
    OrderSelect(pos, SELECT_BY_POS)
    ){
    int duration = TimeCurrent() - OrderOpenTime();
    if (duration >= closeTimeInSeconds)
    OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(),
    3*Point);
    }

    return(0);
    }

    最佳答案

    自动化新闻交易
    您(@iGetIt)正在寻找的是一个基本的新闻交易机器人。这是它的稀释实现。

    在更高级的阶段,您需要根据受影响的货币对自动下载新闻和自动交易,跟踪波动率(以避免波动),同步您的 PC 时间(Windows 日期/时间不准确,需要同步新闻交易到毫秒级别)。跟踪您的经纪服务器响应时间,实现追踪止损(以提高利润),实现滑动订单(多个止损订单以捕捉巨大的峰值),计算订单集的盈利能力(了解何时在价格回撤时关闭所有订单) 等。

    无论如何,这是您可以使用的基本版本(基于 赏金要求 ):

  • 在特定时间打开买入+卖出止损单。
  • 可配置的点数远离当前卖价/买价。
  • 实现 OCO(一个取消另一个)。
  • 以 x-pip 利润(又名 TP 水平)关闭已执行的交易。
  • 在 x 秒后关闭已执行或未完成的止损单。


  • 视觉 :显示它及时执行(这是亚洲时间,所以流动性低,所以在价格变动前 +- 几秒)。
    enter image description here

    闭幕 :根据设置自动关闭。
    enter image description here

    源代码 :这是它的完整 MQL4 源代码。

    ( 更新 15May19 1045 GMT+8) 修复在 TTL 之后关闭已执行订单时报告的错误。
    //+------------------------------------------------------------------+
    //| SO55930471.mq4 |
    //| Copyright 2019, Joseph Lee, joseph.lee@fs.com.my |
    //| TELEGRAM @JosephLee74 |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2019, Joseph Lee, TELEGRAM @JosephLee74"
    #property link "http://www.fs.com.my"
    #property version "1.00"
    #property strict


    //-------------------------------------------------------------------
    // APPLICABLE PARAMETERS
    //-------------------------------------------------------------------
    //-------------------------------------------------------------------
    // NEWS IMPACT SELECTION
    //===================================================================
    extern string vsEAComment = "Telegram @JosephLee74"; //Ego trip
    extern datetime vdTradeStartInGMT = D'2019.5.14 06:00'; //When to trade (GMT)
    extern int viStopOrderLevelInPip = 5; // StopOrder distance from ask/bid (pips)
    extern double viFixLots = 0.01; // Lot size
    extern int viStopLossInPip = 20; // StopLoss (pips)
    extern int viTargetProfitInPip = 100; // TargetProfit (pips)
    extern int viDeleteStopOrderAfterInSec = 30; // StopOrder TTL (sec)
    extern int viDeleteOpenOrderAfterInSec = 300; // Executed Order TTL (sec)
    extern int viMaxSlippageInPip = 2; // Max Slippage (pip)


    //-------------------------------------------------------------------
    // System Variables
    //-------------------------------------------------------------------
    int viMagicId = 0;
    double viPipsToPrice = 0.0001;
    double viPipsToPoint = 1;
    int viBuyStopTicket = -1;
    int viSellStopTicket = -1;
    int viBuyOrderTicket = -1;
    int viSellOrderTicket = -1;
    string vsDisplay = "EVENT-TRADER v1.01 - ";

    //-------------------------------------------------------------------



    //+------------------------------------------------------------------+
    //| EA Initialization function
    //+------------------------------------------------------------------+
    int init() {
    ObjectsDeleteAll(); Comment("");
    // Caclulate PipsToPrice & PipsToPoints (old sytle, but works)
    if((Digits == 2) || (Digits == 3)) {viPipsToPrice=0.01;}
    if((Digits == 3) || (Digits == 5)) {viPipsToPoint=10;}
    viMagicId = vdTradeStartInGMT;
    start();
    return(0);
    }
    //+------------------------------------------------------------------+
    //| EA Stand-Down function
    //+------------------------------------------------------------------+
    int deinit() {
    ObjectsDeleteAll();
    return(0);
    }


    //============================================================
    // MAIN EA ROUTINE
    //============================================================
    int start() {

    //==========================================
    //MANAGE ROBOT EXPIRY
    //==========================================
    if( TimeCurrent() > D'2020.1.1' ) {
    Comment(vsDisplay + "EXPIRED. Please contact josephfhlee74 at gmail dot com"); // Who am I kidding?
    return(0);
    }


    ResetLastError();
    // Exit the routine if it is not time to trade yet.
    if(TimeGMT() < vdTradeStartInGMT) {
    // Show a count-down timer to the trading time.
    Comment(vsDisplay +
    "[" + TimeToStr(TimeGMT()) + " GMT] " +
    IntegerToString(int(vdTradeStartInGMT - TimeGMT())) + " sec to [" +
    TimeToStr(vdTradeStartInGMT) + " GMT]"
    );
    return(0);
    }


    viBuyStopTicket = -1;
    viSellStopTicket = -1;
    viBuyOrderTicket = -1;
    viSellOrderTicket = -1;
    //=========================================================
    //FIND *OPENED* BUY/SELL PENDING ORDERS
    //---------------------------------------------------------
    for( int i=OrdersTotal()-1; i>=0; i-- ) {
    if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES ))
    if( OrderSymbol() == Symbol() )
    if( OrderMagicNumber() == viMagicId) {
    if( OrderType() == OP_BUYSTOP )
    viBuyStopTicket = OrderTicket();
    if( OrderType() == OP_SELLSTOP )
    viSellStopTicket = OrderTicket();
    if( OrderType() == OP_BUY )
    viBuyOrderTicket = OrderTicket();
    if( OrderType() == OP_SELL )
    viSellOrderTicket = OrderTicket();
    }
    }
    //=========================================================
    //FIND *CLOSED* BUY/SELL ORDERS FOR THIS EVENT
    //---------------------------------------------------------
    for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    if(OrderSymbol() == Symbol())
    if(OrderMagicNumber() == viMagicId) {
    if( OrderType() == OP_BUYSTOP )
    viBuyStopTicket = OrderTicket();
    if( OrderType() == OP_SELLSTOP )
    viSellStopTicket = OrderTicket();
    if( OrderType() == OP_BUY )
    viBuyOrderTicket = OrderTicket();
    if( OrderType() == OP_SELL )
    viSellOrderTicket = OrderTicket();
    }
    }
    // The above 2 sections will ensure that each event will only be executed once.
    // If orders are cancelled or closed for whatever reason, they will never be open again.

    string vsVerbose = vsDisplay + "[GMT " + TimeToStr(TimeGMT()) + "] Executing ..."
    "\nActive BUYSTOP: " + viBuyStopTicket +
    " | Active SELLSTOP: " + viSellStopTicket +
    "" +
    "\nActive BUY: " + viBuyOrderTicket +
    " | Active SELL: " + viSellOrderTicket;
    Comment(vsVerbose);


    //=========================================================
    // HANDLES OCO (One-Cancels-the-Other)
    //---------------------------------------------------------
    // BUY Order EXISTS, cancels all SellStops
    if( viBuyOrderTicket != -1 ) {
    for( int i=OrdersTotal()-1; i>=0; i-- ) {
    if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES ))
    if( OrderSymbol() == Symbol() )
    if( OrderMagicNumber() == viMagicId)
    if( OrderType() == OP_SELLSTOP )
    OrderDelete(OrderTicket());
    }
    }
    // SELL Order EXISTS, cancels all BuyStops
    if( viSellOrderTicket != -1 ) {
    for( int i=OrdersTotal()-1; i>=0; i-- ) {
    if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES ))
    if( OrderSymbol() == Symbol() )
    if( OrderMagicNumber() == viMagicId)
    if( OrderType() == OP_BUYSTOP )
    OrderDelete(OrderTicket());
    }
    }

    //=========================================================
    //CLOSE EXPIRED STOP/EXECUTED ORDERS
    //---------------------------------------------------------
    for( int i=OrdersTotal()-1; i>=0; i-- ) {
    if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES ))
    if( OrderSymbol() == Symbol() )
    if( OrderMagicNumber() == viMagicId) {
    if( (OrderType() == OP_BUYSTOP) || (OrderType() == OP_SELLSTOP) )
    if((TimeCurrent()-OrderOpenTime()) >= viDeleteStopOrderAfterInSec)
    OrderDelete(OrderTicket());

    if( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) )
    if((TimeCurrent()-OrderOpenTime()) >= viDeleteOpenOrderAfterInSec) {
    // For executed orders, need to close them
    double closePrice = 0;
    RefreshRates();
    if(OrderType() == OP_BUY)
    closePrice = Bid;
    if(OrderType() == OP_SELL)
    closePrice = Ask;
    OrderClose(OrderTicket(), OrderLots(), closePrice, int(viMaxSlippageInPip*viPipsToPoint), clrWhite);
    }
    }
    }



    //===================================================================
    //OPEN STOP ORDERS IF NO EXISTING nor CLOSED NO BUY/SELL STOP/ORDERS
    //-------------------------------------------------------------------
    // Do NOT execute (place new orders) if it is past the trading window.
    if(TimeGMT() >= (vdTradeStartInGMT+viDeleteStopOrderAfterInSec))
    {
    Comment(vsDisplay + "[" + TimeToStr(TimeGMT()) + " GMT] " + "Already passed execution time.");
    return(0);
    }
    // Place BuyStop if not exists; and no executed-Buy order
    if( (viBuyStopTicket == -1) && (viBuyOrderTicket == -1)) {
    RefreshRates();
    viFixLots = NormalizeDouble(viFixLots, 2);
    double viPrice = NormalizeDouble(Ask + (viStopOrderLevelInPip*viPipsToPrice), Digits);
    double viSL = viPrice - (viStopLossInPip*viPipsToPrice);
    double viTP = viPrice + (viTargetProfitInPip*viPipsToPrice);
    viBuyStopTicket = OrderSend(Symbol(), OP_BUYSTOP, viFixLots
    , viPrice
    , int(viMaxSlippageInPip*viPipsToPoint)
    , viSL, viTP
    , vsEAComment, viMagicId, 0, Blue);
    if(viBuyStopTicket == -1)
    Print("Error executing BuyStop [" + IntegerToString(GetLastError()) + "]." );
    }
    // Place SellStop if not exists; and no executed-Sell order
    if( (viSellStopTicket == -1) && (viSellOrderTicket == -1) ) {
    RefreshRates();
    viFixLots = NormalizeDouble(viFixLots, 2);
    double viPrice = NormalizeDouble(Bid - (viStopOrderLevelInPip*viPipsToPrice), Digits);
    double viSL = viPrice + (viStopLossInPip*viPipsToPrice);
    double viTP = viPrice - (viTargetProfitInPip*viPipsToPrice);
    viSellStopTicket = OrderSend(Symbol(), OP_SELLSTOP, viFixLots
    , viPrice
    , int(viMaxSlippageInPip*viPipsToPoint)
    , viSL, viTP
    , vsEAComment, viMagicId, 0, Red);
    if(viSellStopTicket == -1)
    Print("Error executing SellStop [" + IntegerToString(GetLastError()) + "]." );
    }
    return(0);
    }

    关于mql4 - 我如何在另一笔未平仓交易时取消交易并在给定持续时间内保持未平仓交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930471/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com