Как кодировать? - страница 69

 

Привет, Вульф

wolfe:
Я знаю, что это уже обсуждалось, но может ли кто-нибудь показать мне какой-нибудь код, чтобы разрешить только 1 сделку на бар? Спасибо.

Это работает для меня

datetime LastOpenTime=0;

//////////////////////////////////////////

int Order;

for(int t=0;t<OrdersTotal();t++)

{

if(OrderSelect(t, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumbers && OrderType() == OP_SELL)

{

if(OrderOpenTime()>LastOpenTime)LastOpenTime=OrderOpenTime();

}

}

}

Затем я просто вставляю это в свой код

if(LastOpenTime0)

{ OrderSend(blah blah

Time[0] - это начало свечи вашего таймфрейма, поэтому убедитесь, что вы выбрали правильный таймфрейм.

 
waltini:
Это работает для меня

datetime LastOpenTime=0;

//////////////////////////////////////////

....................

Time[0] - это начало свечи вашего таймфрейма, поэтому убедитесь, что вы выбрали правильный таймфрейм.

Это может быть немного проще:

datetime LastOpenTime; //Global var

[/CODE]

[CODE]

int init()

{

LastOpenTime=Time[0];

}

int start()

{

................

if(LastOpenTime!=Time[0])

{

// do your trade code

LastOpenTime=Time[0];

}

..............

return(0);

}

Ваш "торговый код" будет исполнен только один раз на любой свече. На этой свече больше не будет никакой торговли, даже если вы закроете MT4 и включите его снова. Но обратите внимание, что если вы активируете советника на свече 5pm, то на этой свече тоже не будет никакой торговли, вам придется ждать следующей свечи.

 
wolfe:
Я знаю, что это уже обсуждалось, но может ли кто-нибудь показать мне код, позволяющий только 1 сделку на бар? Спасибо.

Global, поместите это перед init()

datetime PreviousBar;[/CODE]

In the order placement and/or order close stuff, wrap it in this:

if(NewBar() == true)

{

if blah blah blah, gimme pips // not actual functions but you get the idea

if blah blah blah, close orders // um

}

Common function outside main loop:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}
 

Помощь в программировании

Привет,

Я пытался программировать некоторые вещи, но уперся в кирпичную стену. Поэтому я попробовал кое-что очень простое. Если я откомментирую "Print("Five");" и протестирую программу, она выведет только "Yahooooooo". (Ну, он также печатает "One"). Теперь, когда "Print("Five");" закомментирован, даже "Yahooooooo" не печатается. Что я упускаю???

Файлы:
trial.mq4  2 kb
 

Закрытие всех отложенных и открытых ордеров, когда 1 сделка достигает TP

Здравствуйте,

Я пытаюсь написать код в моем советнике, который будет закрывать все отложенные и открытые ордера, когда 1 сделка достигает TP. Ниже приведены коды, которые я использовал, но, похоже, они не работают. Может кто-нибудь взглянуть и подсказать, чего не хватает. Спасибо.

if( PreviousOpenOrders > OpenOrders )

{

for( cnt = OrdersTotal()-1; cnt >= 0; cnt-- )

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

mode = OrderType();

if( OrderSymbol() == Symbol() &&

OrderMagicNumber()==Magic)

{

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue);

if( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red);

если (режим == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (mode == OP_BUYLIMIT) OrderDelete(OrderTicket());

}

}

}

}

 

Используйте Bid и Ask соответственно вместо OrderClosePrice()...

 
ralph.ronnquist:
Используйте Bid и Ask соответственно вместо OrderClosePrice()...

Здравствуйте, Ральф,

не могли бы вы помочь привести пример. Спасибо за помощь.

 
timebandit:
Привет, я пытался программировать некоторые вещи, но уперся в кирпичную стену. Поэтому я попробовал кое-что очень простое. Если я откомментирую "Print("Five");" и протестирую программу, она выведет только "Yahooooooo". (Ну, он также печатает "One"). Теперь, когда "Print("Five");" закомментирован, даже "Yahooooooo" не печатается. Что я упускаю???

Если вы не используете скобки, будет выполнена только одна строка. Это зависит от того, что вы хотите сделать, но вы должны сделать это следующим образом:

if(d>5)

{

Print("Five");

Print("Yahoooooooooooooooooooooooo");

}
 

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Blue);

if( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red);

 

Переместить стоп один раз

Вот мой небольшой код для перемещения стоплосса в безубыток после получения определенной прибыли. Есть ли в этом что-то неправильное?

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() == Point * MoveStopWhenPrice) {

OrderModify(OrderTicket(),OrderOpenPrice(), Bid - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}