ZeroMemory (...) проинициализирует массив типа стринг значением NULL
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
//+------------------------------------------------------------------+
//| test8.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//-------------------------------------------------------------------
extern double lots = 0.1;
extern int TakeProfit = 100;
extern int StopLoss = 50;
extern int Magic = 777;
extern int Slippage = 3;
//-------------------------------------------------------------------
extern string TMA = "Параметры индикатора TMA";
extern string TimeFrame = "current time frame";
extern int HalfLength = 56;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern int ATRPeriod = 100;
extern bool Interpolate = true;
extern int TrailingStop = 50;
extern int TrailingStep = 20;
int timeprev = 0;
//-------------------------------------------------------------------
double PriceHigh, PriceLow, SL ,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits == 3 || Digits == 5);
{
TakeProfit *=10;
Slippage *=10;
TrailingStop *=10;
TrailingStep *=10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (timeprev == Time [0])return;
timeprev = Time [0];
PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if (CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
Print("Ошибк амодификации ордера на продажу!");
} else Print("Ошибка открытия ордера на продаду!");
}
if (CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);
if (ticket > 0)
{
SL = NormalizeDouble(Ask - StopLoss*Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
Print ("Ошибка модификации ордера на покупку!");
} else Print("Ошибка открытия ордера на покупкку!");
}
Trailing();
}
//+------------------------------------------------------------------+
void Trailing()
{
for (int i=OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0)
{
if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0)
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0))
Print ("Ошибка модификации ордера на покупку!");
}
}
}
if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0)
{
if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0)
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0))
Print ("Ошибка модификации ордера на родажу!");
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//-----------------------------------------------------------------------------------------------
int CountBuy()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade>=0; trade--)
{
if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
count++;
}
}
return(count);
}
//-----------------------------------------------------------------------------------------------
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Точнее трейлинг работает, а профит ранее прописанный не работает, в чём причина?
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
if (timeprev == Time [0])
{
timeprev = Time [0];
return;
Здравствуйте. Помогите, пожалуйста, сравнить цену МА на первом баре с ценами МА на предыдущих четырёх барах. Если цена выросла и разница больше N заполнить буфер. Пытаюсь так
ZeroMemory (...) проинициализирует массив типа стринг значением NULL
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
//+------------------------------------------------------------------+ //| test8.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //------------------------------------------------------------------- extern double lots = 0.1; extern int TakeProfit = 100; extern int StopLoss = 50; extern int Magic = 777; extern int Slippage = 3; //------------------------------------------------------------------- extern string TMA = "Параметры индикатора TMA"; extern string TimeFrame = "current time frame"; extern int HalfLength = 56; extern int Price = PRICE_CLOSE; extern double ATRMultiplier = 2.0; extern int ATRPeriod = 100; extern bool Interpolate = true; extern int TrailingStop = 50; extern int TrailingStep = 20; int timeprev = 0; //------------------------------------------------------------------- double PriceHigh, PriceLow, SL ,TP; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5); { TakeProfit *=10; Slippage *=10; TrailingStop *=10; TrailingStep *=10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time [0])return; timeprev = Time [0]; PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0); PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0); if (CountSell() == 0 && Bid >= PriceHigh) { ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red); if (ticket > 0) { TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); SL = NormalizeDouble(Bid + StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print("Ошибк амодификации ордера на продажу!"); } else Print("Ошибка открытия ордера на продаду!"); } if (CountBuy() == 0 && Ask <= PriceLow) { ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue); if (ticket > 0) { SL = NormalizeDouble(Ask - StopLoss*Point, Digits); TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)); Print ("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупкку!"); } Trailing(); } //+------------------------------------------------------------------+ void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid-TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на покупку!"); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0) { if (OrderStopLoss() > Ask + (TrailingStop+TrailingStep)*Point || OrderStopLoss() == 0) { if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble( Ask + TrailingStop*Point, Digits), 0, 0)) Print ("Ошибка модификации ордера на родажу!"); } } } } } } } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------------------- int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //-----------------------------------------------------------------------------------------------Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Точнее трейлинг работает, а профит ранее прописанный не работает, в чём причина?
Доброго времени суток. Вопрос следующий. Написал советник, приделал к нему трейлингстоп, скомпилировал.......... не работает:))))). Перезагрузил комп, подкорректировал исходник, запустился. Стал настраивать через входные параметры, опять не работает, точнее поменялось единожды, и всё.......... Может винда глючить или я где-то накосячил опять. Прикрепляю исходный код.
if (timeprev == Time [0]) { timeprev = Time [0]; return;}
тайкпрофит всё равно не выставляет.... Гляньте ещё раз пожалуйста.
тайкпрофит всё равно не выставляет.... Гляньте ещё раз пожалуйста.
Вы в функции трейлинга всем ордерам ставите тейк 0, а при открытии ставите правильный
Прочтите логику по строкам,
открыли ордер поставили стоп и тейк
начали тралить стоп тейк поставили 0
замените в трейлинге 0 на OrderTakeProfit()
Теперь он стоплос не ставит
Теперь он стоплос не ставит
Покажите новый код
Покажите новый код
Я же Вам четко написал в трейлинге Вы ставите вместо тейка 0
Проверьте этот вариант
Помогите, пожалуйста, сравнить цену МА на первом баре с ценами МА на предыдущих четырёх барах. Если цена выросла и разница больше N заполнить буфер. Пытаюсь так