Спрашивайте! - страница 11

 

Вы говорите о скрипте или чем-то подобном, что будет выполнять роль сервера, на котором советники смогут общаться. Я думаю, что для metaquotes потребуется время, чтобы придумать что-то подобное. Однако на сайте mql4.com говорится, что функция, о которой я говорил, GlobalVariableSetOnCondition() выполняется атомарно. С этим я, вероятно, смогу придумать набор функций для выполнения того, что мне нужно.

 

Кто-нибудь может мне помочь: https://www.mql5.com/en/forum/174184?

 

Помогите - нулевое деление????

Привет всем кодерам...

Что я должен сделать, чтобы решить эту ошибку: деление нуля?

Спасибо за любую помощь...

Файлы:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

Здравствуйте, кодерсгуру,

могу ли я использовать jma вместо ema в коде советника?

 
 

нужна помощь - скорректированный MACD

Я пытаюсь создать индикатор, который корректирует сигнальную линию в зависимости от значения RSI. На самом деле я хотел бы нарисовать еще одну сигнальную линию на MACD, которая корректируется, а обычную сигнальную линию оставить на месте.

edit:

Я заставил индикатор рисовать линию RSI (первый шаг) в том же окне. Но по какой-то причине он не рисует последний период. Пожалуйста, смотрите прикрепленный файл.

Файлы:
 

любая помощь была бы замечательной

Вот немного кода, с которым у меня проблема: //// он работает, когда я загружаю его на northfinace 1 раз, потом он больше не совершает сделки... но он ничего не делает на межбанке... это разворотная система, использующая kama, .0005 - это разворотные пипсы... я понятия не имею, что происходит, так как он совершил 1 сделку на northfinance идеально, когда я впервые загрузил его, но это была существующая сделка, которая уже должна была быть совершена...

 

код

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 1;

extern int Slippage = 3;

extern bool StopLossMode = True;

extern int StopLoss = 40;

extern bool TakeProfitMode = False;

extern int TakeProfit = 60;

extern bool TrailingStopMode = True;

extern int TrailingStop = 35;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

int BarCount;

int Current;

bool TickCheck = False;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

//+------------------------------------------------------------------+

//| функция деинициализации эксперта ||.

//+------------------------------------------------------------------+

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| функция запуска эксперта |

//+------------------------------------------------------------------+

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| Начало переменной |

//+------------------------------------------------------------------+

double Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0);

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0);

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0);

double Buy1_1 = Var1 ;

double Buy1_2 = 25;

double Buy2_1 = Var2 ;

double Buy2_2 = 80;

double Buy3_1 = Var3 ;

double Buy3_2 = 50;

double Sell1_1 = Var1 ;

double Sell1_2 = -25;

double Sell2_1 = Var2 ;

double Sell2_2 = -80;

double Sell3_1 = Var3 ;

double Sell3_2 = -50;

double CloseBuy1_1 = Var1 ;

double CloseBuy1_2 = -25;

double CloseBuy2_1 = Var2 ;

double CloseBuy2_2 = -80;

double CloseBuy3_1 = Var3 ;

double CloseBuy3_2 = -50;

double CloseSell1_1 = Var1 ;

double CloseSell1_2 = 25;

double CloseSell2_1 = Var2 ;

double CloseSell2_2 = 80;

double CloseSell3_1 = Var3 ;

double CloseSell3_2 = 50;

//+------------------------------------------------------------------+

//| Конец переменной |

//+------------------------------------------------------------------+

//Проверка позиции

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Сигнал Begin(Exit Buy)|

//+------------------------------------------------------------------+

if (CloseBuy1_1 <= CloseBuy1_2 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

//+------------------------------------------------------------------+

//| Сигнал End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Трейлинг-стоп

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Сигнал Начало(Выход Продажа) |

//+------------------------------------------------------------------+

if (CloseSell1_1 >= CloseSell1_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Order = SIGNAL_CLOSESELL;

//+------------------------------------------------------------------+

//| Сигнал End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Трейлинг-стоп

if(TrailingStopMode && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Сигнал Begin(Entry)|

//+------------------------------------------------------------------+

if (Buy1_1 >= Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Order = SIGNAL_BUY;

if (Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_2) Order = SIGNAL_SELL;

//+------------------------------------------------------------------+

//| Конец сигнала |

//+------------------------------------------------------------------+

//Покупка

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Проверка свободной маржи

if (AccountFreeMargin() < (1000 * Lots)) {

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if (Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Открыт ордер BUY : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Ошибка открытия ордера BUY : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Продажа

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Проверка свободной маржи

if (AccountFreeMargin() < (1000 * Lots)) {

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if (Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print(" Открытордер SELL: ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Ошибка открытия ордера SELL : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+

 

Я изменил значение .0005 индикатора в эксперте, так как он показывает только линию канала, в конечном итоге уровни - это то, что вам нужно изменить 25,-25 для .0005 ...30,,-30 для .0006, и так далее...

 

Проблема с безубытком и трейлинг-стопом

Здравствуйте,

Я изучаю кодинг по учебнику MQL4 от Codersguru, и я работаю над "My_First_EA". Это действительно мой первый советник. Он работает очень хорошо, но я пытаюсь написать безубыточный стоп и не могу понять, как это сделать. Проблема в том, что безубыточный стоп следует за ценой так же, как и трейлинг-стоп. Я хочу, чтобы начальный стоплосс двигался, чтобы сохранить 1 пункт прибыли, когда я делаю 15 пунктов (например), затем я хочу, чтобы стоплосс оставался на уровне безубыточного стопа (1 пункт прибыли), пока трейлинг-стоп не начнет работать при прибыли в 25 пунктов. Затем я хочу, чтобы трейлинг-стоп работал как обычно, перемещаясь с каждым пунктом прибыли. Я думаю, что проблема может быть в "OrderStopLoss()", но я больше ничего не знаю. Мой мозг превратился в кашу. Спасибо

Вот соответствующий код, который я сделал:

extern double TrailingStop=25.0;

extern double BreakEvenProfit=15;

extern double BreakEvenStop=1;

......................

мой код входа и открытия ордеров здесь работает нормально

......................

for (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType()<=OP_SELL&&OrderSymbol()==Symbol())

{

if (OrderType()==OP_BUY)//Длинная позиция открыта

{

//должна ли она быть закрыта?

if (FSAR > FMA) //мой сигнал на выход

{

//----CLOSE LONG POSITION работает нормально

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta);

return(0);//exit

}

////////////////////ЭТО ПРОБЛЕМНАЯ ОБЛАСТЬ НИЖЕ/////////

//---- ПРОВЕРКА НА БЕЗУБЫТОЧНОСТЬ СТОП ДЛИННОЙ ПОЗИЦИИ------

if (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

if (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow);

return(0);

}

}

//----- ЗДЕСЬ ВСЕ РАБОТАЕТ КАК ТИПИЧНЫЙ ТРЕЙЛИНГ-СТОП.

//---- проверка трейлинг-стопа ДЛИННАЯ ПОЗИЦИЯ

if(TrailingStop>0)

{

if (Bid-OrderOpenPrice()>Point*TrailingStop)

{

if (OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Yellow);

return(0);

}

}

}

}

else// перейти в короткую позицию

Причина обращения: