Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Sergey Golubev, 2020.03.23 16:08
Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
если бы Вы, код правильно вставили - я бы уже поменял местами, придётся пол дня лишние строчки удалять, что бы разобраться с кодом
Если есть огромное желание колупаться в этом, то достаточно поставить метку в стилизаторе
И одним кликом крыски все пустые строки будут удалены.
Если есть огромное желание колупаться в этом, то достаточно поставить метку в стилизаторе
И одним кликом крыски все пустые строки будут удалены.
Спасибо! сейчас попробую - а то я, уже забросил
-------------------
блин хорошая штука, а я, частенько время трачу на это дело . правда ещё немного все равно остались пустоты - но это не так много
не чего такого не менял - только вот это добавил Revers
extern bool Revers = false; // Revers
//--- нет открытых позиций if(!posOpen) { openPrice = MAValue + deviation * _Point; CreateLine("OpenPrice", "Продажа", openPrice, clrDimGray); } if(Revers) { //--- откроем позицию на продажу if(!posOpen && Bid >= openPrice) OpenMarketOrder(OP_SELL, fixLot, Bid); } if(!Revers) { //--- откроем позицию на покупку if(!posOpen && Ask <= openPrice) OpenMarketOrder(OP_BUY, fixLot, Ask); } } //--- текущая тенденция нисходящая if(dnTrend) { //--- нет открытых позиций if(!posOpen) { openPrice = MAValue - deviation * _Point; CreateLine("OpenPrice", "Покупка", openPrice, clrDimGray); } if(Revers) { //--- откроем позицию на покупку if(!posOpen && Ask <= openPrice) OpenMarketOrder(OP_BUY, fixLot, Ask); } if(!Revers) { //--- откроем позицию на продажу if(!posOpen && Bid >= openPrice) OpenMarketOrder(OP_SELL, fixLot, Bid); }
результат до
результат реверс
не чего такого не менял - только вот это добавил Revers
результат до
результат реверс
ещё если стрелочки развернуть
вот так
//--- текущая тенденция восходящая if(upTrend) { //--- нет открытых позиций if(!posOpen) { openPrice = MAValue + deviation * _Point; CreateLine("OpenPrice", "Продажа", openPrice, clrDimGray); } if(Revers) { //--- откроем позицию на продажу if(!posOpen && Bid >= openPrice) OpenMarketOrder(OP_SELL, fixLot, Bid); } if(!Revers) { //--- откроем позицию на покупку if(!posOpen && Ask >= openPrice) OpenMarketOrder(OP_BUY, fixLot, Ask); } } //--- текущая тенденция нисходящая if(dnTrend) { //--- нет открытых позиций if(!posOpen) { openPrice = MAValue - deviation * _Point; CreateLine("OpenPrice", "Покупка", openPrice, clrDimGray); } if(Revers) { //--- откроем позицию на покупку if(!posOpen && Ask <= openPrice) OpenMarketOrder(OP_BUY, fixLot, Ask); } if(!Revers) { //--- откроем позицию на продажу if(!posOpen && Bid <= openPrice) OpenMarketOrder(OP_SELL, fixLot, Bid); }
вот результат
этот второй как правильно открывает
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
всем привет! Помогите пожалуйста доработать советник. Не могу поменять бай и селл местами
extern string EASettings = ""; // EA Settings
extern double fixLot = 0.01; // FixLot
extern int stopLoss = 50; // StopLoss
extern int takeProfit = 50; // TakeProfit
extern int deviation = 80; // Deviation
extern int magic = 123; // Magic
extern string MASettings = ""; // Moving Average Settings
extern int MAPeriod = 50; // Period
extern ENUM_MA_METHOD MAMethod = MODE_SMA; // Method
extern ENUM_APPLIED_PRICE MAPrice = PRICE_CLOSE; // Price
//--- глобальные переменные
double MAValue; // текущее значение МА
double openPrice; // цена открытия позиции
long chartID; // идентификатор графика
bool upTrend; // true - текущая тенденция восходящая
bool dnTrend; // true - текущая тенденция нисходящая
bool posOpen; // true - позиция открыта
//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
//--- проверим корректность настроек
if(!CheckSettings()) ExpertRemove();
chartID = ChartID();
if(GetOrdersNumber() > 0) posOpen = true;
return INIT_SUCCEEDED;
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete("OpenPrice");
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
if(GetOrdersNumber() == 0) posOpen = false;
//--- узнаем текущую тенденцию
MAValue = NormPrice(iMA(_Symbol, PERIOD_CURRENT, MAPeriod, 0, MAMethod, MAPrice, 0));
if(MAValue < Bid) { upTrend = true; dnTrend = false; }
if(MAValue > Bid) { dnTrend = true; upTrend = false; }
//--- текущая тенденция восходящая
if(upTrend)
{
//--- нет открытых позиций
if(!posOpen)
{
openPrice = MAValue + deviation * _Point;
CreateLine("OpenPrice", "Продажа", openPrice, clrDimGray);
}
//--- откроем позицию на продажу
if(!posOpen && Bid >= openPrice)
OpenMarketOrder(OP_SELL, fixLot, Bid);
}
//--- текущая тенденция нисходящая
if(dnTrend)
{
//--- нет открытых позиций
if(!posOpen)
{
openPrice = MAValue - deviation * _Point;
CreateLine("OpenPrice", "Покупка", openPrice, clrDimGray);
}
//--- откроем позицию на покупку
if(!posOpen && Ask <= openPrice)
OpenMarketOrder(OP_BUY, fixLot, Ask);
}
}
//+-----------------------------------------------------------------------------------------------+
//| Функция открывает рыночный ордер |
//+-----------------------------------------------------------------------------------------------+
void OpenMarketOrder(int type, double lots, double price)
{
int ticket = OrderSend(_Symbol, type, lots, price, 0, 0, 0, "", magic, 0);
if(ticket > 0) { SetSLTP(ticket); posOpen = true; ObjectDelete("OpenPrice"); }
}
//+-----------------------------------------------------------------------------------------------+
//| Функция устанавливает StopLoss и TakeProfit |
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int ticket)
{
double sl = 0;
double tp = 0;
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
int type = OrderType();
double oop = OrderOpenPrice();
if(type == OP_BUY)
{
sl = NormPrice(oop - stopLoss * _Point);
tp = NormPrice(oop + takeProfit * _Point);
}
if(type == OP_SELL)
{
sl = NormPrice(oop + stopLoss * _Point);
tp = NormPrice(oop - takeProfit * _Point);
}
if(OrderModify(ticket, oop, sl, tp, 0)) return;
}
}
//+-----------------------------------------------------------------------------------------------+
//| Функция создает линию на графике |
//+-----------------------------------------------------------------------------------------------+
void CreateLine(string name, string descrip, double price, color clr)
{
ObjectDelete(name);
ObjectCreate(chartID, name, OBJ_HLINE, 0, 0, price);
ObjectSetInteger(chartID, name, OBJPROP_WIDTH, 1);
ObjectSetInteger(chartID, name, OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(chartID, name, OBJPROP_COLOR, clr);
ObjectSetInteger(chartID, name, OBJPROP_BACK, false);
ObjectSetInteger(chartID, name, OBJPROP_SELECTABLE, false);
ObjectSetInteger(chartID, name, OBJPROP_SELECTED, false);
ObjectSetInteger(chartID, name, OBJPROP_HIDDEN, true);
ObjectSetString(chartID, name, OBJPROP_TEXT, descrip);
}
//+-----------------------------------------------------------------------------------------------+
//| Функция возвращает количество открытых ордеров |
//+-----------------------------------------------------------------------------------------------+
int GetOrdersNumber(void)
{
int number = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic)
number++;
return number;
}
//+-----------------------------------------------------------------------------------------------+
//| Функция нормализует цену |
//+-----------------------------------------------------------------------------------------------+
double NormPrice(double price)
{
return NormalizeDouble(price, _Digits);
}
//+-----------------------------------------------------------------------------------------------+
//| Функция проверяет корректность настроек советника |
//+-----------------------------------------------------------------------------------------------+
bool CheckSettings(void)
{
double maxLot = MarketInfo(_Symbol, MODE_MAXLOT);
double minLot = MarketInfo(_Symbol, MODE_MINLOT);
if(fixLot > maxLot)
{
Alert("Количество лотов должно быть меньше или равно ", maxLot);
return false;
}
if(fixLot < minLot)
{
Alert("Количество лотов должно быть больше или равно ", minLot);
return false;
}
double stopLevel = MarketInfo(_Symbol, MODE_STOPLEVEL);
double spread = MarketInfo(_Symbol, MODE_SPREAD);
if(stopLoss < stopLevel + spread)
{
Alert("Убыток должен быть больше или равен ", stopLevel + spread, " пунктам");
return false;
}
if(takeProfit < stopLevel + spread)
{
Alert("Прибыль должна быть больше или равна ", stopLevel + spread, " пунктам");
return false;
}
int pip = 2;
if(_Digits == 3 || _Digits == 5) pip *= 10;
if(deviation < pip)
{
Alert("Отклонение должно быть больше или равно ", pip, " пунктам");
return false;
}
return true;
}