Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 78
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу ответить в порядке очереди. Имею индикатор, отображаемый гистограммой. При присоединении или после восстановления связи показывает опупенное значение. Поставил условие при первом запуске обнулять 0-ую ячейку массива. Причем ставил в ините - не помогало. Обнуляю ее в старте - норма. (это по поводу присоединения). по поводу разрыва сети. поставил в старте условие: if(GetLastError()==6)zas[0]=0.0; - не помогает. чую банальность вопроса, но сам теряюсь в догадках - видимо пробел в знаниях.
Без кода, ни как.
Dozol:
Попробуй, перебирать ордера в обратном порядке.
Друзья, помогите. Мне нужно закрыть все ордера по выбранной валютной паре. Вот что я написал (часть кода советника):
int Zakrit_vse() ...
Для вставки кода на форуме используйте SRC
Пока писал код, вы уже разобрались, но т.к. код дописал выложу тут, может что интересное для себя найдёте:
Друзья, помогите. Мне нужно закрыть все ордера по выбранной валютной паре. Вот что я написал (часть кода советника):
Зачем выдумывать велосипед, когда уже все придумано до Вас. К примеру. Не забудьте это.
Помогите! Есть код советника по внешнему канальному индикатору (при достижении верхней границы канала сделка открывается на продажу - закрывается при достижении нижней границы, на покупку в обратном порядке). По непонятным причинам не открывает сделки, не могу найти ошибку. С другим канальным индикатором работает идеально. Сразу оговорю буферы все подобрал.
Код прилагаю
extern double Lots = 0.1;
extern string Сomment = "TMA Canal2";
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int Slippage = 2; // проскальзывание
extern int Magic = 124;
extern string Indi = "Данные индикатора";
extern string TimeFrame = "current time frame";
extern int TMAPeriod = 56;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern int ATRPeriod = 100;
extern double TrendThreshold = 0.5;
extern bool ShowCenterLine = false;
double PriceHigh, PriceLow, SL, TP;
int ticket;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // для пятизначного брокера
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double PriceHigh, PriceLow;
int ticket;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
return;
}
//---- buy conditions
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
return;
}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
//+------------------------------------------------------------------+
Приветствую всех уважаемые программисты, я новичок в mql4, работать со SL и TP умею, но когда встала необходимость закрывать ордера по противоположному сигналу индикатора появилась проблема, я никак не соображу как работает функция подсчёта ордеров OrderSelect(), вот часть кода простого советника, который работает по Стохастику, т.е. перепродан и пересечён между 1 и 2 баром открываем покупку, далее перекуплен и пересечён закрываем покупку и тут же открываем продажу и т.д. Я знаю что для перебора ордеров используется цикл, он в коде есть, но получается в процессе торгов так что ордер только открылся и сразу закрывается т.к. условия открытия покупки совпадают с условиями закрытия продажи и как ему объяснить, что этого делать не надо я не понимаю, объясните пожалуйста.
Для вставки кода служит кнопка SRC!
Как Вы написали это, также делайте добавления, пользуясь Документацией!
Если Вы скопировали, обращайтесь к Автору для доработок или в Работу!
Еще раз добавлю. Ну сколько раз уже говорилось, для вставки кода используйте в верхней строке кнопку
И желательно придерживаться стилей написания кодов.... Желательно, но не обязательно. Но большинству легко понятный код ответят скорей всего.
Приветствую всех уважаемые программисты, я новичок в mql4, работать со SL и TP умею, но когда встала необходимость закрывать ордера по противоположному сигналу индикатора появилась проблема, я никак не соображу как работает функция подсчёта ордеров OrderSelect(), вот часть кода простого советника, который работает по Стохастику, т.е. перепродан и пересечён между 1 и 2 баром открываем покупку, далее перекуплен и пересечён закрываем покупку и тут же открываем продажу и т.д. Я знаю что для перебора ордеров используется цикл, он в коде есть, но получается в процессе торгов так что ордер только открылся и сразу закрывается т.к. условия открытия покупки совпадают с условиями закрытия продажи и как ему объяснить, что этого делать не надо я не понимаю, объясните пожалуйста.
borilunad спасибо за подсказку, переделал, вы тогда тоже можете удалить, то сообщение с цитатой, чтобы не захламлять.