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