string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); } : datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift(NULL,0, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. int iHi = iHighest(NULL,0, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. Print( "High since order opened on ", TimeToStr(OOT)," is ", PriceToStr(HH) );
Вот некоторые ошибки для приведенного выше кода.
'(' - определение функции неожиданно D:\Program Files\FXDD Malta - MetaTrader 4\experts\test2.mq4 (343, 18)
эта ошибка для строки PriceToStr(double p).
для этой ошибки Я не знаю, как я могу исправить это
'iBarCurrent' - переменная не определена D:\Program Files\FXDD Malta - MetaTrader 4\experts\test2.mq4 (348, 30)
Эта ошибка из-за того, что вы определили #define iBarCURRENT, затем вы поместили его как iBarCurrent.
Я исправлю это.
2 ошибки,
Поместите эту строку в самый конец вашего кода вне функции start. ...
string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }
и начните читать это, если хотите научиться кодировать: https://book.mql4.com//
Все ясно, ребята (RaptorUK и WHRoeder),
Спасибо.
datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. int iHi = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. int iLi = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT); double LL = Low[iLi]; // Lowest low.
У меня другой вопрос:
если у меня открыто 2 ордера, один на покупку, другой на продажу:
как мне дать советнику понять и взять iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Бар открытия. Для бара, на котором я получил позицию на покупку, и вычислить максимальное значение с этой точки.
И
Берем iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Бар открытия. Для бара, на котором я получил позицию на продажу, и вычислите минимум с этой точки.
Большое спасибо
for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. if (OrderType == OP_BUY){ int iHi = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. } else{ int iLi = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT); double LL = Low[iLi]; // Lowest low. } }
Чтобы получить OOT, вы должны уже выполнить OrderSelect
Спасибо, ребята.
Также у меня есть другой вопрос:
Как я могу выполнить следующие условия: if (last OrderClosePrice() for sell > before the last OrderClosePrice for sell ) && ( before the last OrderClosePrice for sell >= bid)
что-то вроде этого будет нормально
if ( (OrderType == OP_SELL)&& OrderSelect(pos+1, SELECT_BY_POS,MODE_TRADES ) ) { if( pos>pos+1 && pos+1>MarketInfo("EURUSD",MODE_BID); // close the position
Просто,
Я хочу знать, как я могу получить: ордер перед последним ордером (open или close)price() для (buy или sell), чтобы добавить их для некоторых вычислений.
Большое спасибо.
Я хочу знать, как я могу получить: ордер перед последним ордером (open или close)price() для (buy или sell), чтобы добавить их для некоторых вычислений.
for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOTlatest = OrderOpenTime(); // found latest open order break; } for(pos--; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOTprevious = OrderOpenTime(); // found the previous break; } if (OOTlastest == 0) // no open orders if (OOTprevious == 0) // no previous :
Спасибо WHRoeder,
За реальную помощь. Если мне нужно получить последний ордер на покупку и последний ордер на продажу, то сравнить их, сделав :
if (last orderopenforbuy == OOTlastest)
{ сделайте что-нибудь }
else
{ } ....... будет ли работать приведенный ниже код.
for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ if (OrderType() == OP_BUY){ int lastorderforbuy= OrderOpenPrice(); } else{ int lastorderforsell= OrderOpenPrice(); } } for(pos--; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ if (OrderType() == OP_BUY){ int previousorderforbuy= OrderOpenPrice(); } else{ int previousorderforsell= OrderOpenPrice(); } } if ( ((lastorderforbuy+ previousorderforsell)/2)<=MarketInfo("EURUSD",MODE_BID)) { CLOSESHORT("EURUSD") ;}

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые,
может кто-нибудь проверить приведенную ниже ссылку и ответить на мой вопрос (как я могу получить самую высокую цену после открытия ордера (orderopenprice)).
http://www.forexfactory.com/showthread.php?t=307937