Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Покупка и продажа на 100
Заманиб,
Я понимаю, что вы написали, но я не вижу, как вы закрываетесь с прибылью.
Мне кажется, что это советник типа Hedge.
На forex-tsd есть несколько таких,
и вам не обязательно использовать Мартингейл.
Big Be
Кто-нибудь может поделиться идеями/кодом, как закрыть ордер по значению TakeProfit.
По какой-то причине 'TakeProfit' в функции OrderSend() не всегда работает на коротких/продажных ордерах в MT4, хотя он хорошо работает на длинных/покупательных ордерах.
Я написал некоторый код, сравнивающий значение TakeProfit ордера с текущей ценой, но он не работает правильно. Есть идеи?
евролонги закрываются по цене "bid", а шорты - по цене "ask".
Заманиб,
Я понимаю, что вы написали, но я не вижу, как вы закрываетесь с прибылью.
Мне кажется, что это советник типа Hedge.
На forex-tsd есть несколько таких,
и вам не обязательно использовать Мартингейл.
Биг БиЯ вижу, что рынок движется волнами вверх и вниз, на некоторых неделях бывает 2 цикла вверх/вниз. У меня другая стратегия, когда тренд. Я торгую вручную.
Пожалуйста, направьте меня на хеджевую программу. Я вижу их много, но не совсем то, что мне нужно.
код или проблема с платформой?
лонги закрываются по цене "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); }
Буду благодарен за совет.
евро
Спасибо за ответ.
По какой-то причине мой код не работает:
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.
Есть ли какой-нибудь код для этого? Спасибо!
Например, если я куплю 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.
Я думаю, это то, что вам нужно, или вы можете использовать это в качестве примера.
хорошо
Посмотрите на эту тему о Frank EA https://www.mql5.com/en/forum Я думаю, что это то, что вам нужно, или вы можете использовать его в качестве примера.
спасибо большое newdigital, любые вопросы я буду задавать здесь. спасибо еще раз.
Вопрос ТП
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), ордер не был закрыт.