MT5入門到精通之九(交易類部分)

MT5入門到精通之九(交易類)
一1.訂單號理解

Paste_Image.png

二、注意以下區(qū)別
1.開倉不需要特殊操作
2.平倉和修改持倉單止盈止損

request.position=PositionGetTicket(i);

3.刪除掛單

request.order=OrderGetTicket(i);

三交易類
1.實現(xiàn)

//+------------------------------------------------------------------+
//|                                                        Trade.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Trade
  {
private:

public:
   //slPoint = stop loss point止損點(diǎn)斑举,tpPoint = take profit Point止盈點(diǎn)
   int buy(string symbol,double lots,int slPoint,int tpPoint,string comment,int magic)
     {
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      //市價單
      request.action=TRADE_ACTION_DEAL;
      request.magic=magic;

      request.symbol=symbol;
      request.volume=lots;
      request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);

      request.sl=SymbolInfoDouble(symbol,SYMBOL_ASK)-slPoint*Point();
      request.tp=SymbolInfoDouble(symbol,SYMBOL_ASK)+tpPoint*Point();
      //滑點(diǎn)
      request.deviation=100;
      //多單
      request.type=ORDER_TYPE_BUY;

      request.comment=comment;

      //--- 發(fā)送請求
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // 如果不能發(fā)送請求搅轿,輸出錯誤代碼
      //--- 操作信息
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(result.order);
     }
   int sell(string symbol,double lots,int slPoint,int tpPoint,string comment,int magic)
     {
      MqlTradeRequest request={0};
      MqlTradeResult  result={0};
      //市價單
      request.action=TRADE_ACTION_DEAL;
      request.magic=magic;

      request.symbol=symbol;
      request.volume=lots;
      request.price=SymbolInfoDouble(symbol,SYMBOL_BID);

      request.sl=SymbolInfoDouble(symbol,SYMBOL_BID)+slPoint*Point();
      request.tp=SymbolInfoDouble(symbol,SYMBOL_BID)-tpPoint*Point();
      //滑點(diǎn)
      request.deviation=100;
      //空單
      request.type=ORDER_TYPE_SELL;

      request.comment=comment;

      //--- 發(fā)送請求
      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // 如果不能發(fā)送請求,輸出錯誤代碼
      //--- 操作信息
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      return(result.order);
     }
   void closeAllBuy(string symbol)
     {
      //持倉單遍歷
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
         //選擇持倉單
         if(PositionGetTicket(i)>0)
           {
            if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
              {
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
               request.action=TRADE_ACTION_DEAL;                     // 交易操作類型
               request.symbol=symbol;                              // 交易品種
               request.volume=PositionGetDouble(POSITION_VOLUME); //交易量
               request.type=ORDER_TYPE_SELL;                        //訂單類型
               request.price=SymbolInfoDouble(symbol,SYMBOL_BID); // 持倉價格                                                   
               request.deviation=100;//滑點(diǎn)
               request.position=PositionGetTicket(i);//平倉最好都寫下富玷,不然和sell一樣了璧坟。
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能發(fā)送請求没宾,輸出錯誤
              }
           }
        }
     }
   void closeAllSell(string symbol)
     {
      //持倉單遍歷
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
         //選擇持倉單
         if(PositionGetTicket(i)>0)
           {
            if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
              {
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
               request.action=TRADE_ACTION_DEAL;                     // 交易操作類型
               request.symbol=symbol;                              // 交易品種
               request.volume=PositionGetDouble(POSITION_VOLUME); // 交易量
               request.type=ORDER_TYPE_BUY;                        // 訂單類型
               request.price=SymbolInfoDouble(symbol,SYMBOL_ASK); // 持倉價格
               request.deviation=100; //滑點(diǎn)
               request.position =PositionGetTicket(i);
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能發(fā)送請求,輸出錯誤
              }
           }
        }
     }
   void closeALLBuyAndSell(string symbol)
     {
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
         if(PositionGetTicket(i)>0)
           {
            if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
              {
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
               request.action=TRADE_ACTION_DEAL;                     // 交易操作類型
               request.symbol=symbol;                              // 交易品種
               request.volume=PositionGetDouble(POSITION_VOLUME); // 交易量
               request.type=ORDER_TYPE_SELL;                        // 訂單類型
               request.price=SymbolInfoDouble(symbol,SYMBOL_BID); // 持倉價格
               request.deviation=100; //滑點(diǎn)
               request.position =PositionGetTicket(i);
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能發(fā)送請求沸柔,輸出錯誤
              }
            if(PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
              {
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
               request.action=TRADE_ACTION_DEAL;                     // 交易操作類型
               request.symbol=symbol;                              // 交易品種
               request.volume=PositionGetDouble(POSITION_VOLUME); // 交易量
               request.type=ORDER_TYPE_BUY;                        // 訂單類型
               request.price=SymbolInfoDouble(symbol,SYMBOL_ASK); // 持倉價格
               request.deviation=100; //滑點(diǎn)
               request.position =PositionGetTicket(i);
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());   // 如果不能發(fā)送請求循衰,輸出錯誤
              }
           }
        }
     }
   //修改止盈止損
   void mofiyStoplossAndTakeProfit(string symbol,ENUM_POSITION_TYPE type,double sl,double tp)
     {
      int t=PositionsTotal();
      for(int i=t-1;i>=0;i--)
        {
         if(PositionGetTicket(i)>0)
           {
            if(PositionGetString(POSITION_SYMBOL)==symbol)
              {
               if(type==POSITION_TYPE_BUY)
                 {
                  MqlTradeRequest request={0};
                  MqlTradeResult  result={0};
                  //Modify Stop Loss and Take Profit values of an opened position
                  request.action=TRADE_ACTION_SLTP;
                  // Position ticket
                  request.position=PositionGetTicket(i);
                  request.symbol=symbol;
                  if(sl!=0)
                    {
                     request.sl=NormalizeDouble(sl,Digits());
                    }
                  if(tp!=0)
                    {
                     request.tp=NormalizeDouble(tp,Digits());
                    }
                  if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError());
                 }
               if(type==POSITION_TYPE_SELL)
                 {
                  MqlTradeRequest request={0};
                  MqlTradeResult  result={0};
                  request.action=TRADE_ACTION_SLTP;
                  request.position=PositionGetTicket(i);
                  request.symbol=symbol;
                  if(sl!=0)
                    {
                     request.sl=NormalizeDouble(sl,Digits());
                    }
                  if(tp!=0)
                    {
                     request.tp=NormalizeDouble(tp,Digits());
                    }
                  if(!OrderSend(request,result))
                     PrintFormat("OrderSend error %d",GetLastError());
                 }
              }
           }
        }
     }
   //刪除所有掛單
   void deleteAllPendingOrders(string symbol)
     {
      int t=OrdersTotal();
      for(int i=t-1;i>=0;i--)
        {
         if(OrderGetTicket(i)>0)
           {
            if(OrderGetString(ORDER_SYMBOL)==symbol)
              {
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
               //Delete the pending order placed previously
               request.action=TRADE_ACTION_REMOVE;
               request.order=OrderGetTicket(i);
               request.symbol=symbol;
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError());
              }
           }
        }
     }
                     Trade();
                    ~Trade();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Trade::Trade()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Trade::~Trade()
  {
  }
//+------------------------------------------------------------------+

2.使用

//+------------------------------------------------------------------+
//|                                              commonUseScript.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//顯示確認(rèn)框
#property script_show_confirm
#include <wz\Trade.mqh>

int magic=170425;
Trade td;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
// td.buy(Symbol(),0.1,200,200,"buy",magic);
//td.sell(Symbol(),0.1,200,200,"sell",magic);
//td.closeAllBuy(Symbol());
//td.closeAllSell(Symbol());
//td.closeALLBuyAndSell(Symbol());
//td.mofiyStoplossAndTakeProfit(Symbol(),POSITION_TYPE_BUY,1.00,1.19);
   td.deleteAllPendingOrders(Symbol());
  }
//+------------------------------------------------------------------+

如果您發(fā)現(xiàn)本文對你有所幫助,如果您認(rèn)為其他人也可能受益褐澎,請把它分享出去会钝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市工三,隨后出現(xiàn)的幾起案子迁酸,更是在濱河造成了極大的恐慌,老刑警劉巖俭正,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸鬓,死亡現(xiàn)場離奇詭異,居然都是意外死亡掸读,警方通過查閱死者的電腦和手機(jī)串远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儿惫,“玉大人澡罚,你說我怎么就攤上這事∩銮耄” “怎么了留搔?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铛铁。 經(jīng)常有香客問我隔显,道長,這世上最難降的妖魔是什么饵逐? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任括眠,我火速辦了婚禮,結(jié)果婚禮上梳毙,老公的妹妹穿的比我還像新娘哺窄。我一直安慰自己捐下,他們只是感情好账锹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坷襟,像睡著了一般奸柬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婴程,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天廓奕,我揣著相機(jī)與錄音,去河邊找鬼。 笑死桌粉,一個胖子當(dāng)著我的面吹牛蒸绩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铃肯,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼患亿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了押逼?” 一聲冷哼從身側(cè)響起步藕,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挑格,沒想到半個月后咙冗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漂彤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年雾消,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挫望。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仪或,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出士骤,到底是詐尸還是另有隱情范删,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布拷肌,位于F島的核電站到旦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巨缘。R本人自食惡果不足惜添忘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望若锁。 院中可真熱鬧搁骑,春花似錦、人聲如沸又固。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仰冠。三九已至乏冀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洋只,已是汗流浹背辆沦。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工昼捍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肢扯。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓妒茬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔚晨。 傳聞我的和親對象是個殘疾皇子郊闯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 交易處理函數(shù),用于EA和腳本中。指標(biāo)不能直接調(diào)用這些函數(shù)進(jìn)行交易蛛株。為了在EA和腳本中進(jìn)行交易团赁,在程序交易環(huán)境(智能...
    牛在匯上飛閱讀 3,084評論 0 1
  • @編寫時頭部:例: property copyright "牛在匯上飛" 其中: // 表示后面是預(yù)處理語句。 ...
    牛在匯上飛閱讀 2,296評論 0 2
  • 日精進(jìn)打卡 姓名:張通明 公司:寧波普銳明汽車零部件有限公司 【日精進(jìn)打卡第13天】 【知~學(xué)習(xí)】 1.學(xué)習(xí)“干法...
    d5be29eb948d閱讀 34評論 0 0
  • 前面的話 正則表達(dá)式是javascript操作字符串的一個重要組成部分谨履,但在以往的版本中并未有太多改變欢摄。然而,在E...
    CodeMT閱讀 891評論 0 2