MetaTrader編程入門

}

if (res

{

error=GetLastError();

if(error==134) Print("Received 134 Error after OrderSend() !! "); // not enough money

if(error==135) RefreshRates(); // prices have changed

}

Sleep(5000);

return ;

}

}

void CTP() //跟蹤止贏

{

bool bs = false;

for (int i = 0; i

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if (OrderType() == OP_BUY)

{

if ((Bid - OrderOpenPrice()) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))

{

if (OrderStopLoss()

{

bs = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Green);

}

}

}

else if (OrderType() == OP_SELL)

{

if ((OrderOpenPrice() - Ask) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))

{

if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))

{

bs = OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan);

}

}

}

}

}

MT編程入門教程(2)----指標畫哪里?價格窗口還是獨立窗口?

其實,都可以,不過是坐標的規格化,使得它們在相近的數據範圍,就可以畫在一起。

看你自己的習慣。畫在價格窗口,方便和價格同時感受。

//+本例展示了如何把MA轉換後畫到獨立窗口,同樣也可以把獨立窗口的指標改畫在價格窗口

//要達到這些目的,需要考慮兩個方面 1 估計數據的範圍,以確定以什麼為單位? 2 確定坐標偏移,也就是確定坐標零點。

//目的就是讓你要畫的多條線在同樣的數值範圍,這樣才能同時畫出,達到參考目的

//比如-1000到+1000和0到+4這樣兩套數據要變換後才能在同圖畫出,

//轉換方法复習中學數學直角坐標系的縮放和平移部分-------------------------+

// 共畫2條線

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 Yellow

// Parameter

// MA-Properties

extern double MovingFast = 7;

extern double MovingSlow = 13;

extern double MovingSlow02 = 13;

extern int MaM=2;

extern int MaP=2;

extern int MaM0=3;

extern int MaP0=3;

extern int range1 = 11;

extern int range2 = 4;

int i;

// Buffer

//// 共畫2條線,用2個數組存儲線數據

double bufferMA1[];

double bufferMA2[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//// 設定2條線的順序編號,畫法,對應數組,

SetIndexStyle( 0, DRAW_LINE );

SetIndexBuffer( 0, bufferMA1 );

SetIndexStyle( 1, DRAW_LINE );

SetIndexBuffer( 1, bufferMA2 );

return(0);

}

int deinit() { return(0);}

int start()

{

double Buffer10,Buffer11,Buffer20,Buffer21,Buffer30, Buffer31;

int countedBars = IndicatorCounted();

//---- check for possible errors

if ( countedBars

if ( countedBars > 0 ) { countedBars--; }

int barsToCount = Bars - countedBars;

for ( int i = barsToCount; i >= 0; i-- )

{

//// 開始計算

Buffer20 = iMA(NULL,0,MovingFast,0,MaM,MaP, i) ;//MovingFast

Buffer30 = iMA(NULL,0,MovingSlow,0,MaM,MaP, i) ;//MovingSlow

Buffer21 = iMA(NULL,0,MovingFast,0,MaM,MaP, i+range1) ;

Buffer31 = iMA(NULL,0,MovingSlow02,0,MaM,MaP, i+range2) ;

//賦值給數組以便畫線,使用Point使得坐標以點為單位,保證本指標對不同貨幣的一致y軸單位和視覺效果

bufferMA1[i] = MathRound((Buffer20-Buffer21)/Point);

bufferMA2[i] = MathRound((Buffer30-Buffer31)/Point);

}

return(0);

}

上面把兩個MA的差值畫在獨立窗口,當然若把差值再加上一個MA,就可以畫在價格窗口。

MA及其各種變化是最常用的指標基础。MA一般常用來替代價格本身 再做進一步計算。

如改

#property indicator_chart_window

......

Buffer10 = iMA(NULL,0,MovingFast*6,0,MaM,MaP, i)

bufferMA1 = MathRound(Buffer20-Buffer21)+Buffer10 ;

bufferMA2 = MathRound(Buffer30-Buffer31)+Buffer10 ;

.........

就可以把它們跌加到價格上畫了。

你只需修改Buffer10 ,Buffer20, Buffer21 Buffer30, Buffer31為你需要的,在考慮一下數據範圍坐標問題,你可以畫任意的指標了。

使用timeframes參數可獲得其它時間週期的數據。

使用Symbol( ) 可獲得當前貨幣對的名稱。

使用Point可獲得當前貨幣對的點值。

MT編程入門教程(3)----設計開發指標和自動交易系統的註意事項(個人觀點,僅供參考)

一、 指標的本質和用途:

交易的本質,最基本的交易是一對買賣(有些交易商運行多次部分平倉,有些運行交易間相關聯如一個平倉是另一個開倉的

條件等),利用交易生存期間的價格變化贏利或虧損,可以看出,一個基本的交易有五個要素(1)倉位大小,(2)建倉價格,(3)平倉價格,(4)開倉時間,(5)平倉時間。基本的交易活動交易圍繞這5個要素展開,綜合考慮贏利和虧損的可能而進行,其中只有(1)是自己可完全控制的,其它要素決策的依據信息如市場價格、時間演化、其它(政治經濟氣候需求等)影響的相互複雜作用而不斷變化。對於你們這類大多數交易者,所能獲得的信息只有兩個方面(1)市場本身的價格和時間歷史,(2)公開安排的新聞發佈,一般均基於此進行交易(當然這里不考慮個人的什麼靈感)。這兩個方面也就是技術分析和基本面分析的基础。