mjlee 發表於 12-3-11 08:18

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


快速修改停損停利點
使用方式:
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 intSL=30;
extern intTP=0;
//+-----------------------

mjlee 發表於 12-3-11 21:28

#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm
extern intSL=30;
extern intTP=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 static/image/common/back.gif
#property copyright "Copyright ?2004, MetaQuotes Software Corp."
#property link      "http://www.met ...

程式邏輯 不對

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

mjlee 發表於 12-3-14 14:00

無無明 發表於 12-3-13 12:40 static/image/common/back.gif
程式邏輯 不對

當 停損 停利點數=0 時


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

free2man 發表於 12-3-23 04:07

感覺有點難的程式語法


比mc難多了呵

無無明 發表於 12-3-23 10:47

mjlee 發表於 12-3-14 14:00 static/image/common/back.gif
程式邏輯修正:
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);

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

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




mjlee 發表於 12-4-1 07:09

感謝老師教導及分享!!
頁: [1]
查看完整版本: 請問如何編寫MT4 快速修改多筆單停利(損)價位的腳本?