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)公开安排的新闻发布,一般均基于此进行交易(当然这里不考虑个人的什么灵感)。这两个方面也就是技术分析和基本面分析的基础。

 承诺与声明

兄弟财经是全球历史最悠久,信誉最好的外汇返佣代理。多年来兄弟财经兢兢业业,稳定发展,获得了全球各地投资者的青睐与信任。历经十余年的积淀,打造了我们在业内良好的品牌信誉。

本文所含内容及观点仅为一般信息,并无任何意图被视为买卖任何货币或差价合约的建议或请求。文中所含内容及观点均可能在不被通知的情况下更改。本文并未考 虑任何特定用户的特定投资目标、财务状况和需求。任何引用历史价格波动或价位水平的信息均基于我们的分析,并不表示或证明此类波动或价位水平有可能在未来 重新发生。本文所载信息之来源虽被认为可靠,但作者不保证它的准确性和完整性,同时作者也不对任何可能因参考本文内容及观点而产生的任何直接或间接的损失承担责任。

外汇和其他产品保证金交易存在高风险,不适合所有投资者。亏损可能超出您的账户注资。增大杠杆意味着增加风险。在决定交易外汇之前,您需仔细考虑您的财务目标、经验水平和风险承受能力。文中所含任何意见、新闻、研究、分析、报价或其他信息等都仅 作与本文所含主题相关的一般类信息.

同时, 兄弟财经不提供任何投资、法律或税务的建议。您需向合适的顾问征询所有关于投资、法律或税务方面的事宜。