Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//+------------------------------------------------------------------+
//| ParabolicM5_V2.mq4 |
//| Scriptong |
//| |
//+------------------------------------------------------------------+
#property copyright "Scriptong"
#property link "http://fortrader.ru"
//---- input parameters
extern double ParabolicStep=0.02; // Шаг Параболика
extern double ParabolicMax=0.2; // Максимум Параболика
extern double Lots = 0.1;
extern int MagicNumber=382;
bool FreeMarginAlert = False;
double MinLot, LotStep, MaxLot, Tick;
int LastTicket = 0, StopLevel, Spread;
datetime LastBar = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
MinLot = MarketInfo(Symbol(), MODE_MINLOT);
MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
LotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
Spread = MarketInfo(Symbol(), MODE_SPREAD);
Tick = MarketInfo(Symbol(), MODE_TICKSIZE);
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Открытие позиции |
//| Возвращает: |
//| True - Позиция открыта успешно |
//| False - Ошибка открытия |
//+------------------------------------------------------------------+
bool OpenOrder(int Type, double Price, double SL, double TP)
{
// Блок проверки достаточности свободных средств
if(AccountFreeMarginCheck(Symbol(), OP_BUY, Lots) <= 0 || GetLastError() == 134)
{
if(!FreeMarginAlert)
{
Print("Недостаточно средств для открытия позиции. Free Margin = ", AccountFreeMargin());
FreeMarginAlert = True;
}
return;
}
FreeMarginAlert = False;
// ---------------------------------------------
if(Type == OP_BUY)
string S = "BUY";
else
S = "SELL";
int ticket=OrderSend(Symbol(), Type, Lots, Price, 3, SL, TP, NULL, MagicNumber, 0, CLR_NONE);
if(ticket<0)
{
Print("Ошибка открытия позиции ", S, ": ",GetLastError());
return(False);
}
else
LastTicket = ticket;
return(True);
}
//+------------------------------------------------------------------+
//| Поиск своей позиции и закрытие, если она существует |
//| Возвращает: |
//| True - можно открывать противоположную (своих поз нет) |
//| False - нельзя открывать противоположную (не закрыта |
//| указанная или существует противоположная) |
//+------------------------------------------------------------------+
bool CloseIfExists(int Type)
{
if(OrderSelect(LastTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
{
if(OrderType() == Type)
{
if(Type == OP_BUY)
double Price = Bid;
else
Price = Ask;
OrderClose(OrderTicket(), OrderLots(), Price, 10);
}
return(False);
}
return(True);
}
//+------------------------------------------------------------------+
//| Приведение значений к точности одного тика |
//+------------------------------------------------------------------+
double ND(double A)
{
return(MathRound(A/Tick)*Tick);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(LastBar == Time[0])
return(0);
double SAR0 = iSAR(Symbol(), 0, ParabolicStep, ParabolicMax, 1);
double SAR1 = iSAR(Symbol(), 0, ParabolicStep, ParabolicMax, 2);
// **************************************** Открытие позиций **************************************
// Сигнал Buy
if(SAR0 < Close[1] && SAR1 > Close[2])
{
if(CloseIfExists(OP_SELL))
if((OrderSelect(LastTicket, SELECT_BY_TICKET) && OrderType() == OP_SELL) || LastTicket == 0)
{
RefreshRates();
double SL = ND(SAR0 - Tick);
if(ND(Bid-SL-StopLevel*Tick) > 0)
if(OpenOrder(OP_BUY, Ask, SL, 0))
LastBar = Time[0];
return(0);
}
}
else
// Сигнал Sell
if(SAR0 > Close[1] && SAR1 < Close[2])
{
if(CloseIfExists(OP_BUY))
if((OrderSelect(LastTicket, SELECT_BY_TICKET) && OrderType() == OP_BUY) || LastTicket == 0)
{
RefreshRates();
SL = ND(SAR0 + Spread*Tick + Tick);
if(ND(SL-Ask-StopLevel*Tick) > 0)
if(OpenOrder(OP_SELL, Bid, SL, 0))
LastBar = Time[0];
return(0);
}
}
else
// Подтяжка стопов
if(OrderSelect(LastTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
{
if(OrderType() == OP_BUY && ND(SAR1-Tick) > ND(OrderStopLoss()))
if(ND(Bid-SAR1-StopLevel*Tick) > 0)
if(OrderModify(OrderTicket(), 0, SAR1-Tick, OrderTakeProfit(), 0))
LastBar = Time[0];
if(OrderType() == OP_SELL && ND(SAR1+Spread*Tick+Tick) < ND(OrderStopLoss()))
if(ND(SAR1+Spread*Tick+Tick-Ask-StopLevel*Tick) > 0)
if(OrderModify(OrderTicket(), 0, SAR1+Spread*Tick+Tick, OrderTakeProfit(), 0))
LastBar = Time[0];
}
// ************************************************************************************************
//----
return(0);
}
//+------------------------------------------------------------------+
Ну во первых эксперт не компиллируется.
'\end_of_program' - ending bracket '}' expected C:\Program Files\MetaTrader Finam\experts\ExpParabollic_Revers.mq4 (175,
А искать ошибку в коде, - явно не то занятие в вых. день.
Скорее всего, вы что-то напутали при копировании.
Во вторых. В эксперте присутствует трал.
что совершенно меняет дело! Вы однозначно при этом не получите зеркального отражения сделок!
Однозначно!
Ну во первых эксперт не компиллируется.
'\end_of_program' - ending bracket '}' expected C:\Program Files\MetaTrader Finam\experts\ExpParabollic_Revers.mq4 (175,
А искать ошибку в коде, - явно не то занятие в вых. день.
Скорее всего, вы что-то напутали при копировании.
Во вторых. В эксперте присутствует трал.
что совершенно меняет дело! Вы однозначно при этом не получите зеркального отражения сделок!
Однозначно!
Странно, я попробывал скопировать, выложенный мною, исходный код себе в C:\Program Files\MetaTrader 4\experts и он компилируется и работает. А что это такое - ExpParabollic_Revers.mq4? У нас речь шла о Parabolic_V1.mq4
Может легче написать новый эксперт, чем этот переделывать.
По следующему сценарию: с каждым перемещением индикатора Parabolic SAR должен подтягиваться Buy Limit или Sell Limit и Take Profit для предыдущего ордера.
Это теоритически возможно?
Скомпеллировался эксперт.
ExpParabollic_Revers - это я начал было делать переворотную версию. А потом увидел трал и перестал.
//---------------------------------------------------------------------
Да, конечно. И теоретич. и практически.
Трал профита есть в свободном доступе.
Трал лимит. ордеров тож нетрудно организовать.
Я начинающий программист на MQL4/
Прошу по силе и возможности помочь мне разобраться в нюансах синтаксиса MQL4 или увидеть ошибку в написании определенного эксперта. Дело в том, что приклепленный к данному сообщению разрабатываемый мною эксперт точно по алгоритау выполнят действия 1, 2 и 3, а вот действия 4 и 5 не выполняет. Уже целую неделю потратил на проработку различного рода комбинации с кодом, прочитал уйму литературы, а так и не смог добиться, чтобы функции и операторы в пп. 4 и 5 заработали. Прошу пожа-а-а-луйста помочь не потерять надежду на успех, а то "чайник" уже "кипит", а результата нет, просто руки опускаются от безисходности. Заранее премного благодарен!!!!