Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Atr decresing code ???
Atr decresing - что такое код mql4 ?
--------------------------------------------------------------------------------
Atr decresing
что такое код mql4?
Я бы хотел, чтобы моя ea не открывала позиции, если
ATR d1 > ATR d1 (-1)
Как закодировать 3 уровня трейлинг-стопов
ТрейлингСтоп = 50;
TrailingStop_Over100 = 30;
TrailingStop_Over150 = 20;
Уровень 1: прибыль 0-100 пунктов - TS равен 50 пунктам
Уровень 2: прибыль 101-150 пунктов - TS изменяется на 30 пунктов
Уровень 3: прибыль 151+ пунктов - TS изменяется на 20 пунктов.
Как мне закодировать это( движение вположительном направлении ), чтобы TS изменился, когда прибыль увеличится?
Дэйв
<<<
Был бы очень признателен за опыт кодера.
после первого пересечения установить расстояние между несколькими барами
Привет всем гуру программирования, я новичок в программировании mql4 и застрял на проблеме,
дело обстоит следующим образом:
У меня есть 2 EMA 5 и 20 PERIOD_15 и соответственно 5 и 20 EMA на PERIOD_H1.
Поэтому, когда я вхожу в позицию с первым крестом PERIOD_M15, советник сразу же закрывает позицию в том же баре, если цена движется в другую сторону и делает обратный крест. Это программно правильно, но моя фактическая проблема заключается в том, чтобы подождать следующие 1-2 или более баров и затем закрыть позицию, если будет обнаружен крест.
Можете ли вы помочь мне сделать это? Если здесь есть какая-то тема с такой же проблемой, не могли бы вы прислать мне ссылку.
и модераторы могут удалить это сообщение.
заранее спасибо!!!
-- если у вас уже есть открытая позиция
-- если происходит слишком много пересечений
-- подождите немного перед выходом из этой позиции.
-это должно решить проблему повторных пересечений на одном баре
if(firstCross == 1)
{
---------------------------//Close, проверяем, печатаются ли следующие несколько баров после OpenOrderPrise()-----------------------------------
if(openbar <= closebar)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); // закрытие позиции
return(0); // выход
иначе
return(0);
}
ну я нашел жуткое решение я уже прикрепил.
Если у вас есть идеи по оптимизации сдвига времени или вообще по оптимизации кода, я буду благодарен за любые предложения, заранее спасибо.
Нужна ваша помощь
Здравствуйте трейдеры,
Я буду очень признателен, если кто-нибудь поможет мне разработать алерт к этому индикатору (MT4-LevelStop-Reverse-vB0-3).
Я хочу, чтобы алерт срабатывал сразу после появления стрелки.
Заранее спасибо.
привет,
я использую ваш lucky v2, и хочу узнать код добавления текста на график, который не использует объект--label-->смотрите рисунок ~~.
и пользователь не может удалить текст~ ~
текст выглядит так: "Your lucky is free and still on developing...".
как это закодировать?
спасибоИспользуйте команду Comment()
Комментарий - Документация по MQL4
как закодировать текст uneliminateAble на графике
привет,
я использую ваш lucky v2, и хочу узнать код добавления текста на график, который не использует объект--label-->смотрите картинку ~~.
и пользователь не может удалить текст~ ~
текст выглядит так: "Советник Your lucky v2 бесплатный и находится в разработке...".
как это закодировать?
спасибо
Множественный ордер и множественный трейлинг
В моем Ea я использую несколько ордеров, один на рынке, а другой с лимитом покупки/продажи.
Когда я получаю 3 входа, как в примере, я хочу, чтобы трейлинг начинался вместе и работал вместе.
Пример
1 вход на уровне 1.50
2 вход при 1.4950
3 вход на 1.4930
трейлинг составляет 50 пунктов, но я хочу, чтобы он начинался при достижении 1.5050, а не раньше, если я использую обычный трейлинг, когда цена достигнет 1.5001, второй вход (если он заполнится) начнет отслеживаться, но я не хочу этого... я хочу, чтобы трейлинг начинался с 50 пунктов и все по одной и той же цене, то есть по 1.5050.
Так что лучше сохранить билет, чтобы понять, какой ордер я использую?
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Point*StopLoss,Ask+TakeProfit*Point,0,0,Green);
LastClosedBar = Time[0];
RefreshRates();
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
entratalong= OrderOpenPrice( );
ticket2=OrderSend(Symbol(),OP_BUYLIMIT,Lots_2ingresso,entratalong-Point*Secentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,1,0,Magenta); // NULL, c'e il null in + //
ticket3=OrderSend(Symbol(),OP_BUYLIMIT,Lots_3ingresso,entratalong-Point*Terzentrata-2*Point,3,entratalong-Point*StopLoss-2*Point,entratalong+TakeProfit*Point,NULL,2,0,Magenta); // buono dei test //
[/CODE]
Here the trailign stop, it don't work the trail 1 e trail 2 with at the same time i control the ticket!!!
[CODE]
int TrailStop ()
{
int cnt,result,total=OrdersTotal();
double gain2=Lots_2ingresso;
double gain3=Lots_2ingresso;
int ticket,ticket2,ticket3;
for(cnt = total-1; cnt >= 0; cnt--)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if ((OrderSymbol() == Symbol()) && (OrderProfit() > 0.00))
{
if (OrderType()==OP_BUY && OrderTicket()==ticket )
{
if(Bid - OrderOpenPrice() > Point * TrailingStop )
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
for(cnt = total-1; cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if( OrderType()!=OP_SELL && OrderType()!=OP_BUY) //&& trail==1 && OrdersTotal() > 1 )
result =OrderDelete(OrderTicket());
}
Alert("sta facendo trail");
}
}
}
// trailing 2 parte X pip dopo
if (OrderType()==OP_BUY && OrderTicket()==ticket2)
{
if(Bid - OrderOpenPrice() > Point * Trailing2)
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
}
}
}
// trailing 3 parte X pip dopo
if (OrderType()==OP_BUY )
{
if(Bid - OrderOpenPrice() > Point * Trailing3)
{
if(OrderStopLoss() < Bid - Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
}
}
}// fine trailing
Пожалуйста, измените этот код EMA
Это отличный код от: Coders Guru. Не мог бы кто-нибудь изменить его для меня. Мне нужно, чтобы он только ЗАКРЫВАЛ открытые сделки. Я создал систему, которая говорит мне, когда открывать сделки, и не хочу сидеть за компьютером весь день.
чтобы закрывать сделки. Спасибо, команда.
Измените код, пожалуйста
Это отличный код от: Coders Guru. Не мог бы кто-нибудь изменить его для меня. Мне нужно, чтобы он только ЗАКРЫВАЛ открытые сделки. Я создал систему, которая говорит мне, когда открывать сделки, и не хочу сидеть за компьютером весь день, чтобы закрывать сделки. Спасибо, команда.
//+------------------------------------------------------------------+
//| EMA_6_12.mq4 |
//| Coders Guru |
//| Forex TSD| Индикаторы и советники Metatrader |
//+------------------------------------------------------------------+
#property copyright "Coders Guru"
#property link "https://www.forex-tsd.com"
//---- Включает
#include
//---- Лимиты сделок
extern double TrailingStop = 40;
extern double TakeProfit = 1000; //любое большое число
extern double Lots = 1;
extern int Slippage = 5;
//--- Внешние опции
extern int CurrentBar = 1;
extern bool UseClose = true;
//--- Настройки индикаторов
extern int MaMode = 1; /* MODE_SMA 0 MODE_EMA 1 MODE_SMMA 2 MODE_LWMA 3 */
extern int ShortEma = 4;
extern int LongEma = 8;
//--- Глобальные переменные
int MagicNumber = 123430;
string ExpertComment = "EMA_4_8";
bool LimitPairs = false;
bool LimitFrame = false;
int TimeFrame = 60;
string LP[] = {"EURUSD", "USDJPY", "AUDUSD", "GBPUSD", "EURGBP", "USDCHF"}; // добавляем/удаляем пары, которые вы хотите ограничить.
bool Optimize = false;
int NumberOfTries = 5;
//+------------------------------------------------------------------
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------
bool isNewSymbol(string current_symbol)
{
//перебираем все открытые ордера и сравниваем символы
int total = OrdersTotal();
for(int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
string selected_symbol = OrderSymbol();
if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
return (False);
}
return (True);
}
//+------------------------------------------------------------------
int Crossed()
{
double EmaLongPrevious = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
double EmaLongCurrent = iMA(NULL,0,LongEma,0,MaMode, PRICE_CLOSE, CurrentBar);
double EmaShortPrevious = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar+1);
double EmaShortCurrent = iMA(NULL,0,ShortEma,0,MaMode, PRICE_CLOSE, CurrentBar);
if (EmaShortPreviousEmaLongCurrent ) return (1); // восходящий тренд
if (EmaShortPrevious>EmaLongPrevious && EmaShortCurrent<EmaLongCurrent ) return (2); //тренд вниз
return (0); //другое место
}
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total, n;
double trend ;
if(Bars<100) {Print("баров меньше 100"); return(0);}
if(LimitFrame)
{
if(Period()!=TimeFrame) {Print("Этот советник не работает с этим таймфреймом!"); return(0);}
}
if(LimitPairs)
{
if(AllowedPair(Symbol()) == false) {Print("Этот советник не работает с этой валютой!"); return(0);}
}
//--- Торговые условия
bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false ;
if (Crossed() == 1 )
BuyCondition = false;
if (Crossed() == 2 )
SellCondition = false;
if (Crossed ()== 1)
CloseBuyCondition = true;
if (Crossed ()== 1)
CloseSellCondition = true;
total = OrdersTotal();
if(total < 1 || isNewSymbol(Symbol()))
{
if(BuyCondition) //<-- Условие ПОКУПКИ
{
ticket = OpenOrder(OP_BUY); //<-- Открыть ордер BUY
CheckError(ticket, "BUY");
return(0);
}
if(SellCondition) //<-- Условие SELL
{
ticket = OpenOrder(OP_SELL); //<-- Открыть ордер SELL
CheckError(ticket, "SELL");
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) //<-- Открыта длинная позиция
{
if(UseClose)
{
if(CloseBuyCondition) //<-- Закрываем ордер и выходим!
{
CloseOrder(OrderType()); return(0);
}
}
TrailOrder(OrderType()); return(0); //<-- Отслеживание ордера
}
if(OrderType()==OP_SELL) //<-- Переход в короткую позицию
{
if(UseClose)
{
if(CloseSellCondition) //<-- Закрыть ордер и выйти!
{
CloseOrder(OP_SELL); return(0);
}
}
TrailOrder(OrderType()); return(0); //<-- Отслеживание ордера
}
}
}
return(0);
}
//+------------------------------------------------------------------+
int OpenOrder(int type)
{
int ticket=0;
int err=0;
int c = 0;
if(type==OP_BUY)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,Ask+TakeProfit*Point,ExpertComment,MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Занятые ошибки
{
Sleep(5000);
continue;
}
else //нормальная ошибка
{
break;
}
}
}
}
if(type==OP_SELL)
{
for(c = 0 ; c < NumberOfTries ; c++)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,Bid-TakeProfit*Point,ExpertComment,MagicNumber,0,Red);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Занятые ошибки
{
Sleep(5000);
continue;
}
else //нормальная ошибка
{
break;
}
}
}
}
return(ticket);
}
bool CloseOrder(int type)
{
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
return (OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet));
if(type==OP_SELL)
return (OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet));
}
}
void TrailOrder(int type)
{
if(TrailingStop>0){
if(OrderMagicNumber() == MagicNumber)
{
if(type==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
if(type==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
void CheckError(int ticket, string Type)
{
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(Type + " ордер открыт : ",OrderOpenPrice());
}
else Print("Ошибка при открытии " + Type + " ордера : ", ErrorDescription(GetLastError()));
}
bool AllowedPair(string pair)
{
bool result=false;
for (int n = 0 ; n < ArraySize(LP); n++)
{
if(Symbol() == LP[n])
{
result = true;
}
}
return (result);
}