策略來自: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
標籤
二元樹
(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)
沒有留言:
張貼留言