Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы говорите о скрипте или чем-то подобном, что будет выполнять роль сервера, на котором советники смогут общаться. Я думаю, что для metaquotes потребуется время, чтобы придумать что-то подобное. Однако на сайте mql4.com говорится, что функция, о которой я говорил, GlobalVariableSetOnCondition() выполняется атомарно. С этим я, вероятно, смогу придумать набор функций для выполнения того, что мне нужно.
Кто-нибудь может мне помочь: https://www.mql5.com/en/forum/174184?
Помогите - нулевое деление????
Привет всем кодерам...
Что я должен сделать, чтобы решить эту ошибку: деление нуля?
Спасибо за любую помощь...
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// перейти в короткую позицию