[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1121
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день/ночь
Пытаюсь сделать реверс сделки вот таким примитивным способом, который не работает (расчёт в советнике проходит по тикам):
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // определяет были ли ордера на покупку && было ли закрытие свечи ниже нижнего уровня
{
CheckForClose(); // закрытие ордера
OpenSell(); // открытие ордера на продажу
return;
}
Подскажите в чём я туплю? Был бы признателен так же за ссылки, которые позволили бы ликвидировать этот пробел.
dzhini:
Пытаюсь сделать реверс сделки вот таким примитивным способом, который не работает (расчёт в советнике проходит по тикам):
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // определяет были ли ордера на покупку && было ли закрытие свечи ниже нижнего уровня
Как определить сколько минут между Time1 и Time2?
вот в этой функции вы вероятно считаете все ордера. а надо на Бай
Это стандартная функция:
int CalculateCurrentOrders(string symbol)}
если >0 то это ордера на покупку, если <0 то на продажу )))
Как определить сколько минут между Time1 и Time2?
разница возвращает число секунд.
делим на 60. получаем число минут.
extern double TP = 70; //takeprofit
extern double SL = 0; //stoploss
extern double Lot = 0.1;
double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}
//+------------------------------------------------------------------+
//| expert function |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resBuy==0 && resSell==0 && CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //-------------------------------------интересует вот эта часть: закрытие и открытие на одном баре
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //-------------------------------------интересует вот эта часть: закрытие и открытие на одном баре
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
}
//----------------------------------------------------------------- Check Low&High break (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1];
if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
разница возвращает число секунд.
делим на 60. получаем число минут.
У меня просто выводит дату 1971.03.04 12:00, может это преобразовывать надо?
У меня просто выводит дату, может это преобразовывать надо?
во первых - почему вы умножаете на 60
во вторых - если вы хотите представить на экране число минут в виде времени типа 00:15,
то ни делить ни умножать на 60 не надо.
во первых - почему вы умножаете на 60
во вторых - если вы хотите представить на экране число минут в виде времени типа 00:15,
то ни делить ни умножать на 60 не надо.
да я исправила на деление, но год выходит 1970.01.01 02:51
мне не для экрана нужно, я хотела просто найти количество минут без дат, за этот промежуток времени....
если даже не делить все равно выводит дату, или мне надо еще вычесть дату от которой отталкивается функция сейчас прочитала еще раз про
Если вам нужно просто число минут, то вам абсолютно не зачем пользоваться TimeToStr
Время - это обычное число int
Или как вариант - пользоваться TimeToStr только с флагом TIME_MINUTE