MT人工智能之一(AIP)
Metatrader expert advice
----测试结果惊人
/*[[
ALWAYS IN PLAY
Lots := 1.00
Notes := Best if use in H1 or higher timeframe
Update on every tick := Yes
Enable Alerts := Yes
Disable alert once hit := No
Lots := 1
Stop Loss := 999
Take Profit := 25
Trailing Stop := 999
]]*/
// =========================================================
// DECLARATION
defines: risk(25),mm(1);
vars: spread(0),
Slippage(5),
sl(0),tp(0),maxSimOpen(0),
mode(0),
buffer(0),
lastHigh(0),
target(0),
entryTS(0),
lastLow(0),
cnt(0),
first(0),
lotMM(0),
tHour(0);
cnt= 1;
// =========================================================
// VALIDATION
If CurTime - LastTradeTime < 300 Then Exit;
If Bars<100 or TakeProfit<10 then Exit;
If IsIndirect(Symbol)=TRUE then Exit;
// =========================================================
// DATE CHOKE - For testing purposes
If TimeYear(time[0]) < 2004 then {
Exit;
} else if
TimeMonth(time[0]) < 2 then {
Exit;
};
// =========================================================
// PYRAMIDING - LINEAR
//
// Money management risk exposure compounding
if mm<>0 then
{
lotMM=Ceil(Balance*risk/10000)/10;
if lotMM < 0.1 then {
lotMM = lots;
};
If lotMM > 1 then {
lotMM = Ceil(lotMM);
};
If lotMM > 100 then {
lotMM = 100;
};
} else {
lotMM=Lots;
};
// Adding simultaneously opened position
if mm = 1 then {
If balance < 1000000 then maxSimOpen=1;
If balance > 1000000 then {
maxSimOpen=(Balance*risk/10000)/1000;
} else {
maxSimOpen=1;
}
};
if mm = 2 then {
if balance < 1000000 then maxSimOpen=1;
if balance > 1000000 then {
maxSimOpen=(Balance*risk/10000)/1000;
if maxSimOpen > 20 then maxSimOpen=20;
} else {
maxSimOpen=1;
};
};
entryTS = 10*Point; //Entry trailing stop - points
buffer = 1.0*Point; //Filter/buffer above or below bar High/Low - points
target = TakeProfit*Point; //Profit target - points
lastHigh = High[1]; //Last bar high
lastLow = Low[1]; //Last bar low
spread = Bid-Ask; //Spread
// =========================================================
// TRADE ENTRY
tHour = GetGlobalVariable("tHour");
If TotalTrades<maxSimOpen Then {
//SHORT TRADES ENTRY CRITERIA
If Open[1]>Close[1] and //Last bar bearish, open greater than close;
Ask-lastLow<10*Point and //if Bid rises or falls to within 10pips of Low [1] bar ago, allow order to set;
iSAR(0.05,0.5,0)>Bid and
tHour != TimeHour(time[0]) then
{
SetGlobalVariable("tHour",TimeMinute(time[0]));
// Set stoploss to last bar high + spread
sl = lastHigh+spread;
//place order to sell m-s equals Low[1]-1pip;
//Sell on stop, 1 lot,at:Low[1]-1pip,slip0,Target:Low[1]-1pip-25pip;
SetOrder(OP_SELLSTOP,
lotMM,
lastLow-buffer-spread,
Slippage,
sl,
lastLow-buffer-spread-target,
RED);
Exit;
};
//LONG TRADES ENTRY CRITERIA
If Open[1]<Close[1] and //Last bar bullish, Open less than Close;
lastHigh-Bid<10*Point and //if Bid rises or falls to within 10pips of High[1] bar ago, allow order to set;
iSAR(0.05,0.5,0)<Bid and
tHour != TimeHour(time[0]) then
{
SetGlobalVariable("tHour",TimeMinute(time[0]));
sl = lastLow+spread;
SetOrder(OP_BUYSTOP,
lotMM,
lastHigh+buffer+spread,
Slippage,
sl,
lastHigh+buffer+spread+target,
LIME);
Exit;
};
};
// =========================================================
// TRAILING STOP ADJUSTMENT
If TrailingStop<5 then {print("invalid Trailing Stop");Exit;};
For cnt=1 to TotalTrades
{
mode=OrderValue(cnt,VAL_TYPE);
If mode=OP_BUY then
{
//if Bid-open price is now higher than 10pips profit....
If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(entryTS) then
{
//and the value of the stop loss order is lower than 10pips below the Bid...
If OrderValue(cnt,VAL_STOPLOSS)<(Bid-entryTS) then
{
//then adjust the stop loss part of the order to the Bid - 10pips
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
Bid-entryTS,
OrderValue(cnt,VAL_TAKEPROFIT),
BLUE);
Exit;
};
};
If OrderValue(cnt,VAL_STOPLOSS)>=OrderValue(cnt,VAL_OPENPRICE) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
OrderValue(cnt,VAL_STOPLOSS),
Ask+TakeProfit*Point,
BLUE);
Exit;
};
};
If mode=OP_SELL then
{
//if current Ask price dropped 10 pips or more below the open price
If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(entryTS) then
{
//and the stop loss order is greater than 10pips above the current Ask..
If OrderValue(cnt,VAL_STOPLOSS)>(Ask+entryTS) then
{
//then adjust the stop loss part of the order to Ask+10pips
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
Ask+entryTS,
OrderValue(cnt,VAL_TAKEPROFIT),
BLUE);
Exit;
};
};
If OrderValue(cnt,VAL_STOPLOSS)<=OrderValue(cnt,VAL_OPENPRICE) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),
OrderValue(cnt,VAL_OPENPRICE),
OrderValue(cnt,VAL_STOPLOSS),
Bid-TakeProfit*Point,
BLUE);
Exit;
};
// =========================================================
// CLEANING PENDING TRADES
// check how long it exists in the trading terminal - time is counted in seconds
// if the current time ignoring hours is greater than 58minutes cancel the open order(allowing new one to place).
If mode>OP_SELLSTOP then
{
If Minute>58 then
{
DeleteOrder(OrderValue(cnt,VAL_TICKET),INDIGO);
Exit;
};
};
If mode>OP_BUYSTOP then
{
If Minute>58 then
{
DeleteOrder(OrderValue(cnt,VAL_TICKET),INDIGO);
Exit;
};
};
};
};
Exit;
[此帖子已被 hilow 在 2004-9-27 2:44:47 编辑过]
发表于:2004-09-27 04:18只看该作者
2楼
能否具体解释一下公式的思路?
发表于:2005-02-01 08:28只看该作者
3楼
有 ; 是什么呀?
无主宰!
非自然!
发表于:2005-02-01 10:12只看该作者
4楼
;测试通不过啊。。。