MetaTrader編程入門

2011-06-11 14:46:58

}

if (res<=0)

{

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< OrdersTotal(); 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()< Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))

{

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< 0 ) { return(-1); }

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)公開安排的新聞發佈,一般均基於此進行交易(當然這裡不考慮個人的什麼靈感)。這兩個方面也就是技術分析和基本面分析的基礎。

 承諾與聲明

兄弟財經是全球歷史最悠久,信譽最好的外匯返佣代理。多年來兄弟財經兢兢業業,穩定發展,獲得了全球各地投資者的青睞與信任。歷經十餘年的積澱,打造了我們在業内良好的品牌信譽。

本文所含内容及觀點僅為一般信息,並無任何意圖被視為買賣任何貨幣或差價合約的建議或請求。文中所含内容及觀點均可能在不被通知的情況下更改。本文並未考 慮任何特定用戶的特定投資目標、財務狀況和需求。任何引用歷史價格波動或價位水平的信息均基於我們的分析,並不表示或證明此類波動或價位水平有可能在未來 重新發生。本文所載信息之來源雖被認為可靠,但作者不保證它的準確性和完整性,同時作者也不對任何可能因參考本文内容及觀點而產生的任何直接或間接的損失承擔責任。

外匯和其他產品保證金交易存在高風險,不適合所有投資者。虧損可能超出您的賬戶註資。增大槓桿意味著增加風險。在決定交易外匯之前,您需仔細考慮您的財務目標、經驗水平和風險承受能力。文中所含任何意見、新聞、研究、分析、報價或其他信息等都僅 作與本文所含主題相關的一般類信息.

同時, 兄弟財經不提供任何投資、法律或稅務的建議。您需向合適的顧問徵詢所有關於投資、法律或稅務方面的事宜。