Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 118
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Артём, код выше я кинул
Скопируйте такую же ссылку на ваш код, который вы кинули выше и вставляйте в ваше сообщение, когда отсылаете к какому-либо сообщению кого-либо из участников . А то, думаете, его искать, не зная где он, и о чём он, так сильно хочется?
Где? Вот ссылка на ваше сообщение, на которое я отвечаю: #1170. Она находится в стоке рядом с вашим ником.
Скопируйте такую же ссылку на ваш код, который вы кинули выше и вставляйте в ваше сообщение, когда отсылаете к какому-либо сообщению кого-либо из участников . А то, думаете, его искать, не зная где он, и о чём он, так сильно хочется?
https://www.mql5.com/ru/forum/160683/page109
1082 сообщение
Я просто не знаю как на этом ресурсе, но обычно модератор видит все сообщения любого пользователя включая правки.
Как делать такую сслку на сообщение понятия не имею.
https://www.mql5.com/ru/forum/160683/page109
1082 сообщение
Я просто не знаю как на этом ресурсе, но обычно модератор видит все сообщения любого пользователя включая правки.
Как делать такую сслку на сообщение понятия не имею.
https://www.mql5.com/ru/forum/160683/page109
1082 сообщение
Прикрепите сюда как код, используя кнопку SRC. Тогда можно будет спокойно поглядеть код, не прибегая к загрузке и размещению его в нужной папке терминала - зачем усложнять жизнь тем, кто может вам помочь?
Нет, загружать себе нет желания.
Прикрепите сюда как код, используя кнопку SRC. Тогда можно будет спокойно поглядеть код, не прибегая к загрузке и размещению его в нужной папке терминала - зачем усложнять жизнь тем, кто может вам помочь?
Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.
//| Close_MA.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern bool Uslovie1=false;//Uslovie 4 6+50 MA
extern bool OpenOrders=false;//+---Открыть ордер
extern double Lots=0.01; //Oбьем открываемого ордера
extern const string Настройки_работы_советника="";
extern int Period1=6;//Период 1МА
extern ENUM_APPLIED_PRICE PRICE1=PRICE_MEDIAN; // 1МА По цене
extern int Period2=50;//Период 2МА
extern ENUM_APPLIED_PRICE PRICE2=PRICE_MEDIAN; // 2МА По цене
extern int Period3=1000;//Период 3МА
extern ENUM_APPLIED_PRICE PRICE3=PRICE_MEDIAN; // 3МА По цене
extern uint X=1; // отклонение от ма, пунктов
extern bool PlaySound=false;
extern int M=1000; // миллисекунды в Sleep
extern int R; // раз повторения музыки
extern int count=0;
extern int Step=500; // счетчик тиков 500макс.
int i; // исходный счетчик ордеров
int p=0; // внутренняя для playSound
bool y = false; // для удобства сравнений условий 1,2,3,4,5,6
bool dummy; // для выхода функций в переменную
int ticket = 0; // тикет открываемого ордера
int Magic = 222;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
{
if(Bars<801 || (IsTradeAllowed()==false)) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
return;
}
//+----------------------------------------------------------------
double ma1=NormalizeDouble(iMA(NULL,0,Period1,0,MODE_SMA,PRICE1,0),5);
double ma2=NormalizeDouble(iMA(NULL,0,Period2,0,MODE_SMA,PRICE1,0),5); //три заданных параметра ма
double ma3=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE1,0),5);
//+----------------------------------------------------------------- Открытие ордеров
//+----Купить
{
if(MathAbs(Bid-ma3)<1000*Point() && (myOrdersTotal()==false))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
HLineCreate();
}
else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в плюс
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);
HLineMove();
}
else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,50,0,0,"",Magic,0,clrLightGray);
HLineMove();
}
else if(ticket==0)
{
return;
}
/*
//+----Продать
if(MathAbs(Bid-ma3)>1000*Point() && (myOrdersTotal()==false))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);//+------отправка 1 ордера
HLineCreate1();
}
else if ((Ask>=(FindLastOrderOpenPrice()+(Step*_Point)))&& myOrdersTotal())//+------------если ордер в минус
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
HLineMove1();
}
else if ((Ask<=(FindLastOrderOpenPrice()-(Step*_Point)))&& myOrdersTotal())//+------------если ордер вплюс
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,50,0,0,"",Magic,0,clrLightGray);
HLineMove1();
}
else if(ticket==0)
{
return;
} */
}
//+------------------------------------------------------------------Условия
if(Uslovie1==true) //Bid+ma800
{
if((Bid>=ma3-X*Point && Bid<ma3) || (Bid<=ma3+X*Point && Bid>ma3))
{
{y=true;}
}
}
//+------------------------------------------------------------------закрыть покупки или продажи
if((y==true) && (myOrdersTotal()==true)) //продажа
{
dummy=(OrderClose(OrderTicket(),OrderLots(),Ask,0,White));
}
if((y==true) && (myOrdersTotal()==false))
{
dummy=false;
HLineDelete();
HLineDelete1();
// ExpertRemove();
}
}
//+------------------------------------------------------------------+
bool myOrdersTotal() //если ордера есть
{
for(i=OrdersTotal()-1; i>=0; i--) // цикл будет работать пока не останется ордеров
{
if(((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==true) && OrderSymbol()==Symbol() && (OrderType()<2))
{
return true;
}
}
return false;
}
//-------------------------------------------------------------------
double FindLastOrderOpenPrice()
{
double oldorderopenprice=0;
int oldticket=0;
ticket=0;
for(i=OrdersTotal()-1; i>=0; i--) // цикл будет работать пока не останется ордеров
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic)
&& (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
oldticket=OrderTicket();
if(oldticket>=ticket)
{
ticket=oldticket;
oldorderopenprice=OrderOpenPrice();
}
}
}
return(oldorderopenprice);
}
//-------------------------------------------------------------------
//+------------------------------------------------------ часть Buy bool HLineCreate();
bool HLineCreate(const long chart_ID=0, // ID графика
const string name="Buy", // имя линии
const int sub_window=0, // номер подокна
double price1=0, // цена линии
const color clr=clrAzure, // цвет линии
const ENUM_LINE_STYLE style=STYLE_DASHDOT, // стиль линии
const int width=3, // толщина линии
const bool back=false, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=false, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
if(!price1)
price1=FindLastOrderOpenPrice();
ResetLastError();
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price1))
{
Print(__FUNCTION__,
": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
//--- установим цвет линии
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
ChartRedraw();
}
return(true);
}
//+------------------------------------------------------------------+ HLineMove();
bool HLineMove(const long chart_ID=0, // ID графика
const string name="Buy", // имя линии
double price1=0) // цена линии
{
if(!price1)
price1=FindLastOrderOpenPrice();
ResetLastError();
if(!ObjectMove(chart_ID,name,0,0,price1))
{
Print(__FUNCTION__,
": не удалось переместить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+ bool HLineDelete();
bool HLineDelete(const long chart_ID=0, // ID графика
const string name="Buy") // имя линии
{
ResetLastError();
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
return(true);
}
//+-----------------------------------------------------------------+
//+-----------часть SELL bool HLineCreate1
//+------------------------------------------------------
//+------------------------------------------------------ bool HLineCreate1();
bool HLineCreate1(const long chart_ID=0, // ID графика
const string name="Sell", // имя линии
const int sub_window=0, // номер подокна
double price2=0, // цена линии
const color clr=clrRed, // цвет линии
const ENUM_LINE_STYLE style=STYLE_DASHDOT, // стиль линии
const int width=2, // толщина линии
const bool back=false, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=false, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
if(!price2)
price2=FindLastOrderOpenPrice();
ResetLastError();
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price2))
{
Print(__FUNCTION__,
": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
//--- установим цвет линии
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
ChartRedraw();
}
return(true);
}
//+------------------------------------------------------------------+ HLineMove1();
bool HLineMove1(const long chart_ID=0, // ID графика
const string name="Sell", // имя линии
double price2=0) // цена линии
{
if(!price2)
price2=FindLastOrderOpenPrice();
ResetLastError();
if(!ObjectMove(chart_ID,name,0,0,price2))
{
Print(__FUNCTION__,
": не удалось переместить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+ bool HLineDelete1();
bool HLineDelete1(const long chart_ID=0, // ID графика
const string name="Sell") // имя линии
{
ResetLastError();
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
return(true);
}
ВОТ СЮДА ВСТАВЛЯЕМ:
Артём, это для особо одарённых видео?
Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.
trader781, а какой собственно вопрос по коду?
Преимущество кусков кода в том, что к примеру у меня есть тестовый файл, в который нужно просто скопировать кусок кода с форума и вставить в файл. В противном случае, нужно скачивать ваш файл с кодом, потом открывать папку в папке и вставлять ваш файл, после этого его нужно удалить. Чувствуете разницу?
Пожалуйста, только я не понимаю как его проверять без загрузки себе на терминал. Тоже просьба объяснить в чем преимущество кидать сюда куски кода, забивающие страницу.
Вообще-то обычно люди делают минимальный код для воспроизведения ошибки, о которой вы утверждаете.
Но, судя по коду, вы особо-то и не понимаете что он вообще делает.
У вас в функциях есть параметры, которые можно в них передавать. В частности и цвет линии. Но вы их все сделали с умолчательными значениями и не задаётесь вопросом "а что там у меня внутри функции, какие параметры она получает?", но зато начинаете говорить, что это терминал косячит. Нормально так...
Удалите все умолчательные параметры из функции, которая создаёт линию - компилятор вас заставит подумать о том, что нужно их задать при вызове функции - это нужно для вашего же образования. И уберите дублирующиеся функции - те, где в конце имени 1 вписали - используйте одну ф-цию с разными параметрами.
trader781, а какой собственно вопрос по коду?
Преимущество кусков кода в том, что к примеру у меня есть тестовый файл, в который нужно просто скопировать кусок кода с форума и вставить в файл. В противном случае, нужно скачивать ваш файл с кодом, потом открывать папку в папке и вставлять ваш файл, после этого его нужно удалить. Чувствуете разницу?
ок, я понял
Твою ж дивизию ...
Я понимаю что в текущий момент это все далеко от приемлемого вида, но можно показать почему в случае покупки я не могу получить заданную штрих-пунктирную линию указанного цвета, хотя белую или просто зеленую он спокойно выдаст.
ну и
double OP = 5.00000
TP = (OP/100);
Print("TP= ",TP);
2017.02.09 21:36:03.650 2015.01.05 04:00:00 martin H1-1 USDJPY,H1: TP= 0.5
не понимаю с каких пор разделить 5 на 100 будет 0.5