COCO研究院

 找回密碼
 註冊
搜索
查看: 6053|回復: 6

請問如何編寫MT4 快速修改多筆單停利(損)價位的腳本?

[複製鏈接]
發表於 12-3-11 08:18 | 顯示全部樓層 |閱讀模式
快速修改停損停利點
使用方式:
1、打開欲更改的貨幣對圖表
2、雙擊腳本,輸入參數SL(停損)、TP(停利)。例如SL設為30,代表停損點和現價,差了30點。如果SL設為0,則代表移除停損點。
3、確認後,此貨幣對所有在倉的單(不含掛單),會全部更改停損、停利點。
請問如何編寫MT4 快速修改多筆單停利(損)價位的腳本?



補充內容 (12-3-11 21:25):
#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm
extern int  SL=30;
extern int  TP=0;
//+-----------------------
 樓主| 發表於 12-3-11 21:28 | 顯示全部樓層
#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm
extern int  SL=30;
extern int  TP=0;
//+------------------------------------------------------------------+
//| script "modify first market order"                               |
//+------------------------------------------------------------------+
int start()
  {
   bool   result;
   double stop_loss,Take_profit,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=Bid-SL*point;
               else            stop_loss=Ask+SL*point;
                if(cmd==OP_BUY) Take_profit=Bid-TP*point;
               else            Take_profit=Ask+TP*point;
               result=OrderModify(OrderTicket(),0,stop_loss,Take_profit,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); break; }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
請高手指導修正!!
發表於 12-3-13 12:40 | 顯示全部樓層
mjlee 發表於 12-3-11 21:28
#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.met ...

程式邏輯 不對

當 停損 停利點數=0 時
就不對了

 樓主| 發表於 12-3-14 14:00 | 顯示全部樓層
無無明 發表於 12-3-13 12:40
程式邏輯 不對

當 停損 停利點數=0 時

程式邏輯修正:
1、打開欲更改的貨幣對圖表。
2、雙擊腳本,輸入參數SL(停損)、TP(停利)。
   例如SL輸入為30,代表停損點和現價,差了30點。
   如果SL(停損)輸入為0,則代表不設止損。
   如果TP(停利)輸入為0,則代表不設獲利。
3、確認後,此貨幣對所有在倉的單(不含掛單),會全部更改停損、停利點。
   感謝無無明老師的指導修正!!
發表於 12-3-23 04:07 | 顯示全部樓層
感覺有點難的程式語法


比mc難多了  呵
發表於 12-3-23 10:47 | 顯示全部樓層
mjlee 發表於 12-3-14 14:00
程式邏輯修正:
1、打開欲更改的貨幣對圖表。
2、雙擊腳本,輸入參數SL(停損)、TP(停利)。

if(cmd==OP_BUY)   stop_loss=你的成本 - SL*point;
if(cmd==OP_SELL)  stop_loss=成本 + SL*point;


if(cmd==OP_BUY)   Take_profit=成本 + TP*point;
if(cmd==OP_SELL)  Take_profit=成本 - TP*point;

result=OrderModify(OrderTicket(),0,stop_loss,Take_profit,0,CLR_NONE);

這是 屬於 固定 點數 停損停利 的 模式

至於 追蹤折頭,要另外寫。




 樓主| 發表於 12-4-1 07:09 | 顯示全部樓層
感謝老師教導及分享!!
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-1 07:00

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |