Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 982
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вчера написал код, вроде он работает как надо, но только, когда кнопкой плюс дохожу до крайнего значения массива, то идет сброс на начало массива и перемещение вверх по нему заново. Что можно добавить или исправить в коде, чтобы, когда доходит до верхнего значения массива дальнейшие клики на кнопку плюс останавливались на верхнем индексе и не было сброса вниз массива? Или для реализации этой идеи с нажатием на кнопки код можно ещё как-то упростить?
Наверное так.
Наверное так.
так тоже пробовал, работает так же
так тоже пробовал, работает так же
Я не сразу заметил, а цикл-то там зачем?
Я не сразу заметил, а цикл-то там зачем?
а без него разве как-то можно? Я просто не знаю как лучше и делаю как думаю исходя из логики.
а без него разве как-то можно? Я просто не знаю как лучше и делаю как думаю исходя из логики.
Ну так логика должна быть другая наверное. Нажал кнопку+ уветичился индекс массива. Дошёл до максимума, не увеличивает, а остаётся на максимальном. Нажал кнопку- индекс уменьшился. Дошёл до нуля, не реагирует на нажатие, оста1тся на индексе 0.
Или какая-то другая задумка была?
PS; А кто выкладывал пример работы с флагами, в ответ на этот вопрос и удалил его? Зачем удалили? Ведь это действительно хорошее решение человеку. Зачем ему ограниченный массив???Ну так логика должна быть другая наверное. Нажал кнопку+ уветичился индекс массива. Дошёл до максимума, не увеличивает, а остаётся на максимальном. Нажал кнопку- индекс уменьшился. Дошёл до нуля, не реагирует на нажатие, оста1тся на индексе 0.
Или какая-то другая задумка была?
PS; А кто выкладывал пример работы с флагами, в ответ на этот вопрос и удалил его? Зачем удалили? Ведь это действительно хорошее решение человеку. Зачем ему ограниченный массив???нет, именно такая задумка и была. Я не особо представляю как это сделать правильно, поэтому сделал как получилось. Но я заметил, что при работе цикла в программе, пока цикл не прощелкаю нажимая на кнопки на графике, всё остальное не работает. Как будто ставится всё на паузу. Почему так происходит не понятно. Если есть варианты как-то реализовать идею по-другому, буду признателен...
Всё. Задачу решил) без массивов и прочего разного. Оказалось всё куда проще)))
Второй вопрос созрел. Как в коде можно установить уровень срабатывания Alert с установкой стрелочки, которая появляется, когда Alert устанавливается через контекстное меню мышкой?
Помогите, плз, можно ли добавить к этому советнику такую функцию, чтобы советник установленный в окне EURUSD открывал сделку с такими же параметрами открытия,в то же время, но по GBPUSD, а по EURUSD не открывал.
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Разработчик: Минаев Андрей |
//| Советник: Stochastic.mq4 |
//| Сайт: safe-forex.ru |
//| Почта: minaev.work@mail.ru |
//| Скайп: live:minaev.work |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
#property copyright "Safe-Forex.ru"
#property link "https://safe-forex.ru"
#property strict
extern bool Use_Symbol1 = true;
extern string Symbol1 = "USDJPY";
input string settings = ""; // Настройки советника
input int magic = 111; // Магик
input double fixVolume = 0.01; // Объем
input int takeProfit = 500; // Прибыль
input int stopLoss = 500; // Убыток
input int buyLevel = 100; // 25 Уровень покупки
input int sellLevel = 0; // 75 Уровень продажи
extern int ADXperiod =15; //ADX period 15
extern int ADXLevel =1;
extern int MAperiod =360; //MA period 80
extern int MAperiod_2 =360; //MA period 80
input string stochSettings = ""; // Настройки индикатора Stochastic Oscillator
input int stochPeriodK = 5; // Период %K
input int stochPeriodD = 3; // Период %D
input int stochSlowing = 3; // Замедление
input ENUM_STO_PRICE stochPrice = STO_LOWHIGH; // Цены
input ENUM_MA_METHOD stochMethod = MODE_SMA; // Метод
datetime newCandle; // новая свеча на текущем графике
bool allowOpenBuy, // разрешение открыть позицию Buy
allowOpenSell; // разрешение открыть позицию Sell
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit(void)
{
return INIT_SUCCEEDED;
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick(void)
{
if(newCandle!=Time[0]) CheckSignalExist(); newCandle=Time[0];
if(allowOpenBuy) OpenPosition(OP_BUY);
if(allowOpenSell) OpenPosition(OP_SELL);
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Функция открывает позицию по текущей цене |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void OpenPosition(int type)
{
double price=0.0;
if(type==OP_BUY) price=Ask;
if(type==OP_SELL) price=Bid;
int ticket=OrderSend(_Symbol,type,fixVolume,price,0,0,0,"",magic,0);
// int ticket=OrderSend(,type,fixVolume,price,0,0,0,"",magic,0);
Sleep(1000);
if(ticket>0)
{
if(type==OP_BUY)
{
Print("Открылась позиция Buy, тикет: ",ticket);
allowOpenBuy=false;
// SetStopOrders(ticket);
}
if(type==OP_SELL)
{
Print("Открылась позиция Sell, тикет: ",ticket);
allowOpenSell=false;
// SetStopOrders(ticket);
}
}
if(ticket<0)
{
if(type==OP_BUY) Print("Позиция Buy не открылась, ошибка: ",GetLastError());
if(type==OP_SELL) Print("Позиция Sell не открылась, ошибка: ",GetLastError());
}
}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Функция устанавливает стоп ордера |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//void SetStopOrders(int ticket)
//{
// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),
// spread =MarketInfo(_Symbol,MODE_SPREAD),
// tp =takeProfit,
// sl =stopLoss;
// stopLevel+=spread;
// if(tp<stopLevel)
// {
// tp=stopLevel;
// Print("Установлена минимальная дистанция для прибыли");
// }
// if(sl<stopLevel)
// {
// sl=stopLevel;
// Print("Установлена минимальная дистанция для убытка");
// }
// if(OrderSelect(ticket,SELECT_BY_TICKET))
// {
// int type=OrderType();
// double opp =OrderOpenPrice();
// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Point;}
// if(type==OP_SELL) {tp=opp-tp*_Point; sl=opp+sl*_Point;}
// if(OrderModify(ticket,opp,sl,tp,0))
// {
// if(type==OP_BUY) Print("Установились уровни прибыли и убытка для позиции Buy, тикет: ",ticket);
// if(type==OP_SELL) Print("Установились уровни прибыли и убытка для позиции Sell, тикет: ",ticket);
// }
// else {
// if(type==OP_BUY) Print("Уровни прибыли и убытка для позиции Buy не установились, тикет: ",ticket,", ошибка: ",GetLastError());
// if(type==OP_SELL) Print("Уровни прибыли и убытка для позиции Sell не установились, тикет: ",ticket,", ошибка: ",GetLastError());
// }
// }
//}
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Функция проверяет наличие сигнала |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
void CheckSignalExist(void)
{
double ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); ////////////////////////////
double ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);
double DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);
double DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);
double MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);
double MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);
//PERIOD_H1
double mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),
mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),
signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),
signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);
Comment(" ", (Ask-Bid)/1.5," ",Bid-Close[1]," ", Ask-Close[1]);
// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// && iClose(Symbol(),Period(),1)>MA&& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// &&Close[2]<MA&& Close[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] > Close[1]-(Close[1]-Close[20])
&& Close[10]>Bid )
{
Print("Появился сигнал для открытия позиции Buy");
if(GetPositionsNumber()==0)
{
// allowOpenSell=true;
allowOpenBuy=true;
Sleep(1000);
Print("Разрешено открыть позицию Buy");
}
}
// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel
// && iClose(Symbol(),Period(),1)<MA&& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel
if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel
// &&Close[2]>MA&& Close[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel
&&Close[10] < Close[1]+(Close[20]-Close[1])
&& Close[10]<Ask )
{
Print("Появился сигнал для открытия позиции Sell");
if(GetPositionsNumber()==0)
{
// allowOpenBuy=true;
allowOpenSell=true;
Sleep(1000);
Print("Разрешено открыть позицию Sell");
}
}
}
/////////////////////////////////////////
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Функция возвращает количество открытых позиций |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
int GetPositionsNumber(void)
{
int number=0;
for(int i=0; i<OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic)
number++;
return number;
}
//+---------------------------------------------------------------------------------------------------------------------------------
Помогите, плз, можно ли добавить к этому советнику такую функцию, чтобы советник установленный в окне EURUSD открывал сделку с такими же параметрами открытия,в то же время, но по GBPUSD, а по EURUSD не открывал.
Простите, у вас с головой всё в порядке? Мало того, что код вставил через одно место, да ещё и не удалил закомментированные строки, да ещё и пустые строки оставил в огромном количестве.
Вам не кажется, что надо уважать тех у кого просите помощи???