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

 

Покупка и продажа на 100

Заманиб,

Я понимаю, что вы написали, но я не вижу, как вы закрываетесь с прибылью.

Мне кажется, что это советник типа Hedge.

На forex-tsd есть несколько таких,

и вам не обязательно использовать Мартингейл.

Big Be

 
european:
Кто-нибудь может поделиться идеями/кодом, как закрыть ордер по значению TakeProfit.

По какой-то причине 'TakeProfit' в функции OrderSend() не всегда работает на коротких/продажных ордерах в MT4, хотя он хорошо работает на длинных/покупательных ордерах.

Я написал некоторый код, сравнивающий значение TakeProfit ордера с текущей ценой, но он не работает правильно. Есть идеи?

евро

лонги закрываются по цене "bid", а шорты - по цене "ask".

 
Big Be:
Заманиб,

Я понимаю, что вы написали, но я не вижу, как вы закрываетесь с прибылью.

Мне кажется, что это советник типа Hedge.

На forex-tsd есть несколько таких,

и вам не обязательно использовать Мартингейл.

Биг Би

Я вижу, что рынок движется волнами вверх и вниз, на некоторых неделях бывает 2 цикла вверх/вниз. У меня другая стратегия, когда тренд. Я торгую вручную.

Пожалуйста, направьте меня на хеджевую программу. Я вижу их много, но не совсем то, что мне нужно.

 

код или проблема с платформой?

ralph.ronnquist:
лонги закрываются по цене "bid", а шорты - по цене "ask".

Спасибо за ответ.

По какой-то причине мой код не работает:

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

Буду благодарен за совет.

евро

 
european:
Спасибо за ответ.

По какой-то причине мой код не работает:

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

[/PHP]

I would be grateful for advice.

euro

Правильно; "Close[0]" - это цена "bid", которая не является ценой, против которой закрывается OP_SELL. OP_SELL закрывается против цены "ask", которая на несколько пунктов (ака спред) выше цены "bid".

Когда ваш советник запускается, цена "bid" также доступна как переменная с именем "Bid", а цена "ask" - как переменная с именем "Ask". Поэтому фрагмент кода будет выглядеть следующим образом:

[PHP]if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

 

Помогите пожалуйста с кодом, спасибо...

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

Я новичок в написании советников, я пытался сделать следующее, но получил ошибку "Invalid ticket for OrderModify function", Может кто-нибудь любезно взглянуть и помочь? Заранее благодарю.

void ModifyHedgeSL(int SL) {

if (SL<1) return;

bool bres;

double sl,openadj;

if (lastopenbuy==1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}

for (int i = 0; i < OrdersTotal(); i++) {

OrderSelect (i, SELECT_BY_POS,MODE_TRADES);

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )

{

sl = GetLastLongOpenPrice()-openadj-SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White);

if (bres) Print("Модификация Хедж-ПОКУПКИ завершена");

if (!bres) Print("Ошибка модификации ордера Hedge BUY : ",ErrorDescription(GetLastError()));

}

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_SELL )

{

sl = GetLastShortOpenPrice()-openadj+SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold);

if (bres) Print("Модификация хеджа SELL завершена");

if (!bres) Print("Ошибка при модификации ордера Hedge SELL: ",ErrorDescription(GetLastError()));

}

}

return;

}

double GetLastLongOpenPrice() {

int ord;

double LastLongOpenPrice=0;

//----

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber()==expertId && OrderType() == OP_BUY)

{

LastLongOpenPrice=OrderOpenPrice();

}

}

if (LastLongOpenPrice>0) {return(LastLongOpenPrice);}

else {return(-1);}

}

 

Как закодировать ордера на покупку/продажу при достижении SL

Например, если я покупаю 1 лот EUR/JPY по цене 164.30 и Sl на уровне 164.00.

если SL будет пробит, то я поставлю еще один ордер на покупку по той же цене, 164.30, с тем же SL на 164, и с большим количеством лотов, скажем, 1.5. Затем, если SL снова будет пробит, будет размещен еще один ордер на покупку 2 лотов по той же цене с тем же SL.

Есть ли какой-нибудь код для этого? Спасибо!

 
boostrade:
Например, если я куплю 1 лот EUR/JPY по цене 164.30 и Sl на 164.00.

если SL будет пробит, то я размещу еще один ордер на покупку по той же цене, 164.30, с тем же SL на 164, и с большим количеством лотов, скажем, 1.5. Затем, если SL снова будет пробит, будет размещен еще один ордер на покупку 2 лотов по той же цене с тем же SL.

Есть ли код для этого? Спасибо!

Посмотрите на эту тему о советнике Frank https://www.mql5.com/en/forum.

Я думаю, это то, что вам нужно, или вы можете использовать это в качестве примера.

 

хорошо

newdigital:
Посмотрите на эту тему о Frank EA https://www.mql5.com/en/forum Я думаю, что это то, что вам нужно, или вы можете использовать его в качестве примера.

спасибо большое newdigital, любые вопросы я буду задавать здесь. спасибо еще раз.

 

Вопрос ТП

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

Ральф,

Как вы можете видеть, я вызываю отдельную функцию CloseOrder(), где я использовал 'Ask' и 'Bid', как вы рекомендуете, но проблема все еще существует.

// Функция CloseOrder **********************************************************

bool CloseOrder(int orderT) {

double sA;

if (OrderSelect(orderT, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY) sA = Bid;

else sA = Ask;

bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE);

if (bClosed == 1) {

pTrades = 0; return(1); }

else return(0); }}

**********************************************************

Я надеялся, что это гарантирует, что сделка будет закрыта, как только TP будет достигнут, но это не так, см. приложенный график, где короткий ордер был открыт на 104.03 с TP на 103.79. Несмотря на то, что цена достигла его (TP), ордер не был закрыт.

Файлы:
tp_failed.jpg  32 kb