Jump to content
Sign in to follow this  
Меандр

Проблемы с модификацией MACD Sample

Recommended Posts

Меандр

MACD Sample был модифицирован с целью постановки

отложенных ордеров. Ордера-то выставляются, но

некоторые не срабатывают, поскольку цена не доходит и их надо удалять. Но они не удаляются.

Привожу текст программы. Буду благодарен за подсказку. Name := MACD Sample

Author := Copyright © 2002, MetaQuotes Software Corp.

Link := http://www.metaquotes.ru

Notes := Lots := 0.1

Stop Loss :=

Take Profit :=

Trailing Stop :=

]]*/

defines: MACDOpenLevel(4),MACDCloseLevel(4);

defines: MATrendPeriod(29),SDVIG(15),ORDLimit(3000);

var: MacdCurrent(0),MacdPrevious(0),SignalCurrent(0),SignalPrevious(0);

var: MaCurrent(0),MaPrevious(0);

var: cnt(0);

 

If Bars<40 or TakeProfit<10 then Exit; MacdCurrent=iMACD(12,26,9,MODE_MAIN,0);

MacdPrevious=iMACD(12,26,9,MODE_MAIN,1);

SignalCurrent=iMACD(12,26,9,MODE_SIGNAL,0);

SignalPrevious=iMACD(12,26,9,MODE_SIGNAL,1);

MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);

MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);

 

 

 

If TotalTrades<1 then

{ If FreeMargin<100 then Exit;

If MacdCurrent<0 and MacdCurrent>SignalCurrent and

MacdPrevious<SignalPrevious and Abs(MacdPrevious)>(MACDOpenLevel*Point)and

MaCurrent>MaPrevious then

{

SetOrder(OP_BUYLIMIT,Lots,Ask-SDVIG*Point,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,Yellow); Exit;

};

 

If MacdCurrent>0 and MacdCurrent<SignalCurrent and

MacdPrevious>SignalPrevious and Abs(MacdPrevious)>(MACDOpenLevel*Point) and

MaCurrent<MaPrevious then //and Hour<1 then

{

SetOrder(OP_SELLLIMIT,Lots,Bid+SDVIG*Point,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,SkyBlue);Exit;};

Exit;

};

 

 

 

for cnt=1 to TotalTrades

 

{

 

If OrderValue(cnt,VAL_TYPE)<=OP_SELL and OrderValue(cnt,VAL_SYMBOL)=Symbol then {

If OrderValue(cnt,VAL_TYPE)=OP_BUY then

{

 

If TrailingStop>0 then { If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then

{

If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then

{

ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Green);

Exit;

};

};

};

}

else {

 

If TrailingStop>0 then { // If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then

{

If OrderValue(cnt,VAL_STOPLOSS)=0 or

OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then

{

ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),

Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Green);

Exit;};

 

for cnt=1 to TotalTrades

{

if Ord(cnt,VAL_TYPE)=OP_SELLLIMIT then

{

If (CurTime-OrderValue(cnt,VAL_OPENTIME))>ORDLimit then

{

DeleteOrder(cnt,Green); Exit; };

 

if Ord(cnt,VAL_TYPE)=OP_BUYLIMIT then

{

If (CurTime-OrderValue(cnt,VAL_OPENTIME))>ORDLimit then

{

DeleteOrder(cnt,Green); Exit; };

 

};

};};};};};};};

 

// the end

Share this post


Link to post
Share on other sites
Пипелац

Мне кажется, что Ваша программа не может

идентифицировать ордер, обратите

внимание на синтаксис оператора из хелпа:

DeleteOrder(OrderValue(1,VAL_TICKET),Red);

не даром они пишут "VAL_TICKET",

честно говоря мне бы сначала попробовать

самому, а потом советовать, да лень,

а вот мыслю Вам высказать -

не лень. Успехов.

Чем проще - тем лучше.

Мои эксперты:

http://www.pipelatc.narod.ru/


Чем проще - тем лучше.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×