常聽到的是突破/跌破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-------
}
標籤
二元樹
(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)
沒有留言:
張貼留言