Alexandr Sokolov #: Подскажите если кто помнит как называется функция возврата индекса бара когда передаваемым в неё параметром указывается время открытия бара - я забыл и не могу её найти, а комбинации слов Get Index Bar в поисковике не помогают))
по коду сов открывает сделку внутри бара Н1, но по данным с баров М1 (есть сигнал на М1 - открываем)
но если ордер закроется внутри того же бара Н1, то (если есть новый сигнал) откроется еще один ордер внутри того же бара Н1.
Как запретить открытие более одного ордера внутри одного Н1 бара?
я нашел здесь функцию:
//| Описание : Возвращает номер бара открытия последней позиции или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) t=OrderOpenTime();
}}}}}}
return(iBarShift(sy, tf, t, True));}
вставил в код и вот так "прицепил":
//---- Процедура открытия ордеров----------------------------------------------------------------------------------------------------------------if (!gb_Pause) // Если время работы НЕ подпадает под ограничения, установленные в настройках
{
int NO_orders = 0, li_cmd, li_ind, li_ORD;
double ld_Price, ld_TP2, ld_PriceBar = iOpen (gs_Symbol, gi_ControlPeriod, 0);
string lsa_ord[] = {"buy","sell"};
color lca_color[] = {Blue,Red};
//---- Работаем по отдельности с каждым набором настроекfor (int li_PR = 0; li_PR < cnt_MG; li_PR++)
{
//---- Определяем очерёдность исполнения сетовif (Use_Prioritity && !gb_first) {li_MG = gia_Priority[li_PR];} else {li_MG = li_PR;}
//---- Нет открытых ордеров по Магикуif ((gia_MyOrders[li_MG] == 0)&& CountOrders()==0) //*************************************ИЗМ
{
//---- Контролируем на текущем баре открытие только одного ордера------------------------------------------------------------------------------------------------------------if (cur_Life_min <= gia_LifeStart[li_MG])
{
for (li_ORD = 0; li_ORD < 2; li_ORD++) //в этой строке выбирается направление (buy/sell) 0=buy 1=sell,,,
{
//---- Цена двигается от цены открытияif (li_extrem == li_ORD)
{
//---- Вычисляем динамически MIN_Distanceif (gda_MIN_Distance[li_MG] < 0)
{
if (gda_MIN_Distance[li_MG] == -1.0)
{lda_MIN_Distance[li_MG] = NormalizeDouble (gda_AvarageCandle[0], Digits);} // средний размер тела свечи за последние суткиelseif (gda_MIN_Distance[li_MG] == -2.0)
{lda_MIN_Distance[li_MG] = NormalizeDouble (gda_AvarageCandle[1] / 2.0, Digits);}//средний размер теней свечи за последние сутки
}
else {lda_MIN_Distance[li_MG] = gda_MIN_Distance[li_MG];}
if (li_ORD == 0) {li_cmd = 1; li_ind = 1;} else {li_cmd = -1; li_ind = 0;} //li_ORD == 0 - OP_BUY//---- Если цена прошла нужную дистанцию вниз-----------------------------------//---- Но не зашла слишком далеко if (li_cmd * (ld_PriceBar - gda_Price[li_ind]) >= lda_MIN_Distance[li_MG] && li_cmd * (ld_PriceBar - gda_Price[li_ind]) <= lda_MIN_Distance[li_MG] * 2.0)
//где li_cmd=1 для OP_BUY //где ld_PriceBar - это цена открытия текущ бара Н1!!!//где gda_Price -массив цен в котором: gda_Price[li_ind = 1] - Bid, gda_Price[li_ind = 0] - Ask
{
//---- Если есть все разрещения - открываем ордер------------------------------------------------------------------------------------------------------------------------------------if ( NumberOfBarOpenLastPos(NULL,0,li_ORD, MG2)!=0 )
{
if ( gdt_NewBarH1 != gdt_BeginBar_H1)
{
li_Ticket1 = 0;
ld_Price = NormalizeDouble (fGet_TradePrice (li_ind, RealTrade, gs_Symbol), Digits);
ld_TP2 = NormalizeDouble (ld_Price + li_cmd * MathMax (gd_TP2, MarketInfo (gs_Symbol, MODE_STOPLEVEL) * Point), Digits);
li_Ticket1 = OrderSend (gs_Symbol, li_ORD, LOT(), ld_Price, Slippage, NormalizeDouble (ld_Price - li_cmd * gd_SL, Digits), ld_TP2, lsa_ord[li_ORD], MG2, 0, lca_color[li_ORD]);
// символ бай/селл лот цена откр проскальз ------------------стоп лосс------------------------ тейк комментарий магик срок истеч ордbreak;
}
}
}
}
}
}
else
{
//---- Подсчитываем количество сетов, "отработавших" на этом баре
NO_orders++;
if (NO_orders == cnt_MG - 1)
// {gdt_NewBarControl = ldt_BeginBarControl; return;}continue;
}
}
}
}
//======================ИЗМ Удалены строки 537 - 647(правила закрытия ордеров)
}
Подскажите если кто помнит как называется функция возврата индекса бара когда передаваемым в неё параметром указывается время открытия бара - я забыл и не могу её найти, а комбинации слов Get Index Bar в поисковике не помогают))
... уже не надо, нашел - это iBarShift
здравствуйте всем!
по коду сов открывает сделку внутри бара Н1, но по данным с баров М1 (есть сигнал на М1 - открываем)
но если ордер закроется внутри того же бара Н1, то (если есть новый сигнал) откроется еще один ордер внутри того же бара Н1.
Как запретить открытие более одного ордера внутри одного Н1 бара?
я нашел здесь функцию:
вставил в код и вот так "прицепил":
но что то не работает..
связь между функциями не работает?
где ошибка, подскажите пожалуйста?
Как запретить открытие более одного ордера внутри одного Н1 бара?
идея запоминать время открытия предыдущего ордера не приходило в голову ?
это один из вопросов намозоливших глаза..
идея запоминать время открытия предыдущего ордера не приходило в голову ?
это один из вопросов намозоливших глаза..
приходила, идея запоминать время закрытия предыдущего одера, но вот с чем его сравнить, не понимаю
здравствуйте всем!
У бери все что добавил
и пропиши это
У бери все что добавил
и пропиши это
и всё? так просто? спасибо!
кто нибудь встречал индикатор, который рисует (полупрозрачным фоном) свечу Д1 на графике М15, М30, Н1?
Думаю такого для МТ4 нет
Есть, можно на канвасе нарисовать
P.S. Я вроде даже в котобазе встречалЕсть, можно на канвасе нарисовать
P.S. Я вроде даже в котобазе встречал