標籤

二元樹 (1) 字串常數池 (1) 投資 (3) 每月損益 (37) 例外處理 (1) 泛型 (2) 股票 (15) 指標 (5) 英文 (8) 基本資料型別 (1) 期貨 (1) 程式交易 (10) 量化投資 (5) 亂亂寫 (3) 概念 (3) 資料結構 (3) 演算法 (3) 數學 (3) 轉型 (1) AMA (1) ArrayList (1) assert (1) BeautifulSoup (1) C/C++ (8) casting (1) ClassCastException (1) classpath (1) Collection (4) Comparable (1) comparTo() (1) constructor (1) database (3) Debian (1) Dropbox (2) EA (2) enum (1) equals() (2) exception (3) extends (1) ffmpeg (1) final (1) Git (1) HashMap (1) HashSet (1) hasNext() (1) HTS (3) instanceof (1) IS-A (1) Iterator (1) JAVA (43) length (1) Linux (31) List (1) Mac (6) Map (1) ML (2) MT4 (6) MySQL (2) next() (1) NullPointerException (1) Number (1) Numpy (2) OpenCart (1) OpenCV (3) OSX (1) overloading (1) overriding (3) pandas (2) PHP (8) PriorityQueue (1) Python (11) Queue (1) random() (1) reverse() (1) Samba (1) SCJP (21) sqrt() (1) synchronized (1) talib (1) ufw (1) uTorrent (1) var-args (2) VHF (1) vim (2) Yhoo知識+ (4)

2016年4月29日 星期五

2016 4月損益 -20676 -19357

淨收付總額: 10425 總買進金額: -3228365 總賣出金額: 3238790
成交日期代號名稱成交單價損益報酬率當沖
0105/4/16505台塑化946420.69%
0105/4/100641R日本反21.62570.13%現股
0105/4/600641R日本反22.25360.08%現股
0105/4/74551智伸科技94.2-3659-3.75%現股
0105/4/700641R日本反22.22560.13%現股
0105/4/700651R香港反14.05380.09%現股
0105/4/800632RT50反119.22610.32%
0105/4/800631LT50正218.811080.19%現股
0105/4/84721美琪瑪30.6770.25%
0105/4/800656RA50反119.55-436-0.74%現股
0105/4/114721美琪瑪314741.56%
0105/4/1100632RT50反119.08-373-0.65%現股
0105/4/1100641R日本反22.15-264-0.59%現股
0105/4/1100650L香港2X16.62110.43%現股
0105/4/1200631LT50正219.32460.12%現股
0105/4/1200631LT50正219.36530.28%現股
0105/4/1200650L香港2X16.72540.16%現股
0105/4/1200650L香港2X16.72170.10%現股
0105/4/1300640L日本2X14.19600.21%現股
0105/4/1300640L日本2X14.24800.57%現股
0105/4/1300640L日本2X14.25910.64%現股
0105/4/1400640L日本2X15.06-270-0.89%現股
0105/4/1400650L香港2X18.26-518-0.94%現股
0105/4/1400650L香港2X18.18-266-1.45%現股
0105/4/1400651R香港反13.26-97-0.18%現股
0105/4/1400640L日本2X15.05-310-1.02%現股
0105/4/1400640L日本2X15.244181.39%現股
0105/4/1400640L日本2X15.233981.33%現股
0105/4/1400631LT50正219.96-183-0.23%現股
0105/4/1500632RT50反118.66-469-0.50%現股
0105/4/1500640L日本2X15.08-337-0.45%現股
0105/4/1500641R日本反20.64-241-0.58%現股
0105/4/1800640L日本2X14.19-562-1.30%現股
0105/4/2000631LT50正219.558401.46%現股
0105/4/2000631LT50正219.55-136-0.23%現股
0105/4/2000631LT50正219.28-874-2.22%現股
0105/4/2000653L印度2X20.97-90-0.43%現股
0105/4/2000653L印度2X21.07390.19%現股
0105/4/2100651R香港反13.18-259-0.65%現股
0105/4/2100637L滬深2X11.172490.45%現股
0105/4/2100640L日本2X15.75850.14%現股
0105/4/2200650L香港2X18.3350.04%現股
0105/4/2200637L滬深2X11.18-121-0.18%現股
0105/4/2200640L日本2X15.762580.33%現股
0105/4/2200650L香港2X18.26-158-0.29%現股
0105/4/2500653L印度2X20.723310.40%現股
0105/4/2600650L香港2X17.72-492-0.46%現股
0105/4/2600640L日本2X15.59-511-0.81%現股
0105/4/2600640L日本2X15.59-265-0.84%現股
0105/4/2700637L滬深2X11.291780.26%現股
0105/4/2700640L日本2X15.51-310-0.33%現股
0105/4/2700637L滬深2X11.27-121-0.18%現股
0105/4/2700653L印度2X21.21780.18%現股
0105/4/2700637L滬深2X11.2-601-0.89%現股
0105/4/2700640L日本2X15.52490.08%現股
0105/4/2800631LT50正219.542240.38%現股
0105/4/282301光寶科38.65-655-1.67%現股
0105/4/283227原相72.8-8081-10.02%
0105/4/2800640L日本2X15.9723075.07%現股
0105/4/2900631LT50正218.591830.50%現股
0105/4/292325矽品48.151660.35%現股
0105/4/2900631LT50正218.44-116-0.31%現股
0105/4/2900635U元黃金21.07780.19%現股
0105/4/2900640L日本2X13.96-3920-12.33%
0105/4/2900640L日本2X13.94-3960-12.46%
0105/4/2900653L印度2X20.58-98-0.47%現股
總計:--20676-0.58%
當沖勝率51%
非當沖勝率57%
總勝率52%

上個月才說我當沖勝率低,結果這個月10支有9支都在當沖,賠錢活該該。
既然勝率超過五成,賠錢都是因為凹單,最後愈凹賠愈多,根本就忘記我當初設定一張訂單最多只能賠2千。結果現在,只能賠1千6了(還想賠啊?)。

總損益-19357

2016年4月28日 星期四

日本央行未如預期放寬政策 日經大跌

日本央行意外保持貨幣政策不動,驚動市場,日股早盤漲幅完全擋不住這股巨大賣壓,目前日股已經大幅下挫,日元兌美元匯率也暴漲。


我在那根大黑K的高點有兩張日本2X,在低點又加碼2張,看來後勢不妙。

2016年4月21日 星期四

LSS通道

上下通道表示支撐及壓力,所突破就做多,跌破做空,只限日內交易。
公式參考自:http://rane1220.pixnet.net/blog/post/48867946

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Yellow

double buffer1[];
double buffer2[];

int init(){
int draw_begin;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,buffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,buffer2);
return 0;
}

int start(){
int limit = Bars - IndicatorCounted();

for(int i=0; i<limit; i++){
buffer1[i] = LssUp(i);
buffer2[i] = LssDown(i);
}

return 0;
}

double LssUp(int shift){
double upv, buv, dup, lssup;

shift++;
upv = iLow(NULL,0,shift) + (iHigh(NULL,0,shift) - iLow(NULL,0,shift+1) +
   iHigh(NULL,0,shift+1) - iLow(NULL,0,shift+2) +
   iHigh(NULL,0,shift+2) - iLow(NULL,0,shift+3))/3;
buv = iHigh(NULL,0,shift) + (iHigh(NULL,0,shift) - iHigh(NULL,0,shift+1) +
    iHigh(NULL,0,shift+1) - iHigh(NULL,0,shift+2) +
    iHigh(NULL,0,shift+2) - iHigh(NULL,0,shift+3))/3;
dup = iHigh(NULL,0,shift);
lssup = 2*(iHigh(NULL,0,shift) + iLow(NULL,0,shift) + iClose(NULL,0,shift))/3 - iLow(NULL,0,shift);

return (upv+buv+dup+lssup)/4;
}

double LssDown(int shift){
double downv, bdv, ddown, lssdown;

shift++;
downv = iHigh(NULL,0,shift) - (iHigh(NULL,0,shift+1) - iLow(NULL,0,shift) +
      iHigh(NULL,0,shift+2) - iLow(NULL,0,shift+1) +
      iHigh(NULL,0,shift+3) - iLow(NULL,0,shift+2))/3;
bdv = iLow(NULL,0,shift) - (iLow(NULL,0,shift+1) - iLow(NULL,0,shift) +
   iLow(NULL,0,shift+2) - iLow(NULL,0,shift+1) +
   iLow(NULL,0,shift+3) - iLow(NULL,0,shift+2))/3;
ddown = iLow(NULL,0,shift);
lssdown = 2*(iHigh(NULL,0,shift) + iLow(NULL,0,shift) + iClose(NULL,0,shift))/3 - iHigh(NULL,0,shift);

return (downv+bdv+ddown+lssdown)/4;
}

區間突破策略

常聽到的是突破/跌破8:45~9:00就進場做多/空,我寫了一個可以突破任意時間前的高低才進場的EA,測了一下好像10點以後才進場比較好。不過參考就好,因為MT4的回測資料品質爛死惹(只能測到最近2個月的5分K)。

摩台指2/18~4/21,一天只進場一次

#property copyright   "2016, Bill Chen"

input double Lots = 0.1;    
input int hands  = 1;
extern int theMagicNum = 3732;

extern double startTime = 8.75;
extern double sendTime = 9;
extern double endTime = 13.5;

input string str4= "Timeframes 1,5,15,30,60,...";
input int    MATrendPeriod = 15;  

double takeProfit, highest15, lowest15;
datetime lastBarTime;
int flag = 0;

void OnTick(void){
   int    cnt,ticket,total, symbolOrders;    
   double curTime = (Hour()+12)%24 + Minute()/60.0;

   if(Month()==11 || Month()==12 || Month()==1 || Month()==2) curTime++;
   if(Bars<100){
      Print("bars less than 100");  
      return;
   }

   total=OrdersTotal();
   symbolOrders = 0;
 
   if(curTime==sendTime){
      int kbarnum = (sendTime-startTime)/0.083;
      highest15 = iHigh(NULL,MATrendPeriod,iHighest(NULL,MATrendPeriod,MODE_HIGH,kbarnum,0));
      lowest15 = iLow(NULL,MATrendPeriod,iLowest(NULL,MATrendPeriod,MODE_LOW,kbarnum,0));
      takeProfit = highest15 - lowest15;
      flag = 0;
   }

   for(cnt=0; cnt<total; cnt++){  
    if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))   continue;
    if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==theMagicNum)   symbolOrders++;  
  }
     
      //------send orders  starts -------
       if( symbolOrders < hands && (curTime>=sendTime && curTime<=endTime-0.05) && flag==0){
          if(AccountFreeMargin() < (1000*Lots)){  
             Print("We have no money. Free Margin = ",AccountFreeMargin());
             return;
          }
                                       
               if(iClose(NULL,MATrendPeriod,0) > highest15){    
              ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask,3, 0, 0,"AMAtrading v.0.1.3", theMagicNum,0,Green);  flag=1;            
                     if(ticket>0){  
                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){ Print("BUY order opened : ",OrderOpenPrice());  
                        }else   Print("Error opening BUY order : ",GetLastError());
                        return;
                     }
        }else if(iClose(NULL,MATrendPeriod,0) < lowest15){   //v.0.1.2
                     ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3, 0, 0,"AMAtrading v.0.1.3", theMagicNum,0,Red);  flag=1;
                     if(ticket>0){  
                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){ Print("SELL order opened : ",OrderOpenPrice());
                        }else   Print("Error opening SELL order : ",GetLastError());  
                        return;
                     }
               }
             
        }//------send orders  ends -------

    //-----orders handle starts-------  
   for(cnt=0;cnt<total;cnt++){  
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))   continue;  
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()  && OrderMagicNumber()==theMagicNum){
         if(OrderType()==OP_BUY){
     if(iClose(NULL,MATrendPeriod,0)<OrderOpenPrice()-takeProfit/2 || (Bid-OrderOpenPrice())>takeProfit*2 || curTime>=endTime){
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))    Print("OrderClose error ",GetLastError());
               return;
     }
        }else{
       if(iClose(NULL,MATrendPeriod,0)>OrderOpenPrice()+takeProfit/2 || (OrderOpenPrice()-Ask)>takeProfit*2 || curTime>=endTime ){
     if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))    Print("OrderClose error ",GetLastError());
               return;
              }
          }
      }
    }//-----orders handle ends-------

  }

2016年4月15日 星期五

HTS-新倉

IF condition1 then

    (此處為新倉進場寫法)

   End if



多單進場寫法

BUY                       [當根收盤買進]

Buy on close                  [當根收盤買進]

Buy("買進") on close                [當根收盤買進]

Buy("買進") this bar on close          [當根收盤買進]

Buy("買進") next bar on market         [下一根市價買進]

Buy("買進") 1 contract this bar at close     [當根收盤買進1口]

Buy("買進") 1 contract next bar at market   [下一根市價買進1口]



空單進場寫法

將Buy 改成sell ,及為空單進場寫法



如果是平倉

多單改為 Exitlong

空單改為 ExitShort


FROM


若您想在股價向上突破均線時(預設為10日均)買進,

向下跌破均線時賣出,語法如下

Parameter:Length(10)  

if close cross over average(close,length)  then buy next bar at market
end if

if close cross under average(close,length) then sell next bar at market
end if

2016年4月13日 星期三

Escalator Trading System

策略來自:http://www.bituzi.com/2014/03/EscalatorTradingSystem.html

簡單說就是,昨天是黑K,而今天是紅K,而且收盤又大於8MA和40MA,則明天高於這兩根的高點做多; 若昨天紅K,今天黑K,收盤又小於8MA和40MA,明天低於兩根的低點放空。
這兩根1黑1紅的K棒,看起來就像一邊上一邊下的電扶梯。

input double Lots          = 0.1;    
input int hands  = 1;
input int theMagicNum = 334;

extern string str1 = "Timeframe Setting";
input int timeFrame = 5;

double stopLoss,takeProfit;

void OnTick(void){

 int    cnt,ticket,total, symbolOrders;

   if(Bars<100){
      Print("bars less than 100");
      return;
   }

   total=OrdersTotal();
   symbolOrders = 0;

   for(cnt=0; cnt<total; cnt++){
    if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))   continue;
    if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==theMagicNum)   symbolOrders++;  
   }  
      //------send orders  starts -------
       if( symbolOrders < hands ){
          if(AccountFreeMargin() < (1000*Lots)){  
             Print("We have no money. Free Margin = ",AccountFreeMargin());
             return;
          }

          if(canBuy() && iClose(NULL,timeFrame,0)>=(High[iHighest(NULL,timeFrame,MODE_HIGH,2,1)]+1*Point)){
  ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask,3, 0, 0,"EscalatorTradingSystem.v.0.1", theMagicNum,0,Green);
  stopLoss = High[iHighest(NULL,timeFrame,MODE_HIGH,2,1)]+1*Point-(Low[iLowest(NULL,timeFrame,MODE_LOW,2,1)]-1*Point);
  takeProfit = stopLoss*2;

            if(ticket>0){  
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))    Print("BUY order opened : ",OrderOpenPrice());
            }else   Print("Error opening BUY order : ",GetLastError());
               return;          
   }else if(canSell() && iClose(NULL,timeFrame,0)<=(Low[iLowest(NULL,timeFrame,MODE_LOW,2,1)]-1*Point)){
              ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3, 0, 0,"AMAtrading.v.0.3", theMagicNum,0,Red);
              stopLoss = High[iHighest(NULL,timeFrame,MODE_HIGH,2,1)]+1*Point-(Low[iLowest(NULL,timeFrame,MODE_LOW,2,1)]-1*Point);
           takeProfit = stopLoss*2;
               
                if(ticket>0){
                  if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))    Print("SELL order opened : ",OrderOpenPrice());
                }else   Print("Error opening SELL order : ",GetLastError());  
              return;
           }
        }//------send orders  ends -------



    //-----orders handle starts-------  
   for(cnt=0;cnt<total;cnt++){  
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))   continue;
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()  && OrderMagicNumber()==theMagicNum ){
         if(OrderType()==OP_BUY){
if((Bid-OrderOpenPrice())>takeProfit || (OrderOpenPrice()-Ask)>stopLoss ){
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))    Print("OrderClose error ",GetLastError());
                    return;
}
        }else{
   if((OrderOpenPrice()-Ask)>takeProfit || (Bid-OrderOpenPrice())>stopLoss ){
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))    Print("OrderClose error ",GetLastError());
                      return;
              }
          }
      }
    }//-----orders handle ends-------
  }


bool canBuy(){
   double kRange1 = iHigh(NULL,timeFrame,1)-iLow(NULL,timeFrame,1),
          kRange2 = iHigh(NULL,timeFrame,2)-iLow(NULL,timeFrame,2);
       
   if(iClose(NULL,timeFrame,2)<=iLow(NULL,timeFrame,2)+kRange2*0.25 &&
      iClose(NULL,timeFrame,1)>=iHigh(NULL,timeFrame,1)-kRange1*0.25){
      if(iClose(NULL,timeFrame,1)>iMA(NULL,timeFrame,8,0,MODE_SMA,PRICE_CLOSE,0) &&
         iClose(NULL,timeFrame,1)>iMA(NULL,timeFrame,40,0,MODE_SMA,PRICE_CLOSE,0))
            return true;
      else return false;
   }else return false;
}

bool canSell(){
   double kRange1 = iHigh(NULL,timeFrame,1)-iLow(NULL,timeFrame,1),
          kRange2 = iHigh(NULL,timeFrame,2)-iLow(NULL,timeFrame,2);
       
   if(iClose(NULL,timeFrame,1)<=iLow(NULL,timeFrame,1)+kRange1*0.25 &&
      iClose(NULL,timeFrame,2)>=iHigh(NULL,timeFrame,2)-kRange2*0.25){
      if(iClose(NULL,timeFrame,1)<iMA(NULL,timeFrame,8,0,MODE_SMA,PRICE_CLOSE,0) &&
         iClose(NULL,timeFrame,1)<iMA(NULL,timeFrame,40,0,MODE_SMA,PRICE_CLOSE,0))
            return true;
      else return false;
   }else return false;
}

2013.3 to 2016.4 摩台指日K