Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Хорошо, по первоначальному вопросу:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Magenta
extern int MAPeriod=200;
extern double iController = 1.386;
//---- buffers
//double Memory[200];
double ExtMapBuffer1[];
int limit = 200;
//---- variables
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(1);
//---- drawing settings
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
IndicatorShortName( "Antaria_Rising");
//---- initialization done
return(0);
}
int start()
{
int limit;
//ExtMapBuffer1[1] = ExtMapBuffer1[0];
//ExtMapBuffer1[0] = iController;
for(int i=(0); i<=(limit-1); i++)
{
ExtMapBuffer1 = ExtMapBuffer1;
}
ExtMapBuffer1[0] = iController;
return(0);
}[/CODE]
Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:
[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a doubleЯ предполагаю, что хочу заменить последний кусок кода, который фактически позволяет мне обновить в объекте incicator переменную, по которой он отслеживается, чтобы я мог позже использовать его в качестве стоп-линии. Остальной код не имеет значения. Когда я запускаю вышеупомянутую функцию, я ожидаю, что antaria переместит позицию с 1.39 или того, на чем она стартует, на 1.2. Я не могу вспомнить, использую ли я переменную 200. Я думаю, что я вырезал свои комментарии в верхнем и нижнем колонтитулах, но весь ведомый индикатор находится там, а именно AntariaRising, упомянутый в приведенном выше коде.
это была единственная функция, которую я смог найти, которая общалась с объектами индикатора, и я использую ее для считывания значений в других областях.
По поводу вашего кода индикатора. Это неправильно.
Предел Var. всегда равен нулю.
Уберите строку:
int limit;
из start().
Помогите мне с этим кодом, пожалуйста
Я хочу, чтобы кто-нибудь помог мне с этим кодом, он открывает сделку, когда я хочу, но закрывает ее автоматически, поэтому я хочу, чтобы он торговал со стоп-лоссом, а не закрывался, когда не пересекается снова Вот код
//+------------------------------------------------------------------+
//| JR300.mq4 |
//| onelove |
//| Forex Forum | Forex Tsd | Metatrader Forum | Metatrader Forum |
//+------------------------------------------------------------------+
#property copyright "oneLove"
#property link "https://www.forex-tsd.com"
//---- входные параметры
extern double TakeProfit=250.0;
extern double Lots=0.1;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if(line1>line2)current_direction = 1; //up
if(line1<line2)current_direction = 2; //вниз
if(current_direction != last_direction) //changed
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,
Bid-TakeProfit*Point, "My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
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(isCrossed == 2)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
// закрываем позицию
return(0); // выход
}
// проверка наличия трейлинг-стопа
if(TrailingStop>0){
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-
Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // переходим в короткую позицию
{
// должна ли она быть закрыта?
if(isCrossed == 1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
// закрываем позицию
return(0); // выход
}
// проверка наличия трейлинг-стопа
if(TrailingStop>0){
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||
(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Попробуйте это:
//| JR300.mq4 |
//| onelove |
//| Forex Forum | Forex Tsd | Metatrader Forum |
//+------------------------------------------------------------------+
#property copyright "oneLove"
#property link "https://www.forex-tsd.com"
//---- input parameters
extern double TakeProfit=250.0;
extern double StopLoss=100.0;
extern double Lots=0.1;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if(line1>line2)current_direction = 1; //up
if(line1<line2)current_direction = 2; //down
if(current_direction != last_direction) //changed
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
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) // long position is opened
{
// should it be closed?
//if(isCrossed == 2)
//{
//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
// close position
//return(0); // exit
//}
// check for trailing stop
if(TrailingStop>0){
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-
Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
//if(isCrossed == 1)
//{
//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
// close position
//return(0); // exit
//}
// check for trailing stop
if(TrailingStop>0){
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||
(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+Спасибо
Попробуйте это:
//| JR300.mq4 |
//| onelove |
//| Forex Forum | Forex Tsd | Metatrader Forum |
//+------------------------------------------------------------------+
#property copyright "oneLove"
#property link "https://www.forex-tsd.com"
//---- input parameters
extern double TakeProfit=250.0;
extern double StopLoss=100.0;
extern double Lots=0.1;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if(line1>line2)current_direction = 1; //up
if(line1<line2)current_direction = 2; //down
if(current_direction != last_direction) //changed
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket, total;
double shortEma, longEma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);
int isCrossed = Crossed (shortEma,longEma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,
Bid-TakeProfit*Point,"My EA",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
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) // long position is opened
{
// should it be closed?
//if(isCrossed == 2)
//{
//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
// close position
//return(0); // exit
//}
// check for trailing stop
if(TrailingStop>0){
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-
Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
//if(isCrossed == 1)
//{
//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
// close position
//return(0); // exit
//}
// check for trailing stop
if(TrailingStop>0){
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||
(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+Спасибо, roger09 Благослови вас Бог
Спасибо, Роджер, я удалил второе объявление ограничения из моей функции start. Я удивлен, что компилятор разрешил это, но это не оказало заметного влияния на мою программу.
Тем не менее, я не знаю, как изменить запущенный экземпляр этого индкатора из моего советника. Был бы очень признателен за метод, или хотя бы подтверждение того, что API в настоящее время не позволяет мне передавать информацию запущенным индикаторам.
Спасибо.
Я начинаю этот тред, чтобы получить некоторую помощь здесь. Я учусь кодировать для индикатора, который прилагается, но это не сработало. Кто-нибудь может помочь? Это очень надежный индикатор, и если кто-нибудь сможет сделать советник для него, это будет почти святой Грааль. тиа.
Основная схема такова:
1.открыть позицию на продажу при появлении красной стрелки,
2.открываем позицию на покупку при появлении белой стрелки и автоматически закрываем все позиции на продажу.
3.применяется для любого таймфрейма.
4.без стоп-лосса,
5.добавить функцию ордера.
Жду ответа!
//+------------------------------------------------------------------+
//| IINWMARROWS.mq4 |
//| Основано на EMA_CROSS.mq4 |
//| Copyright ?2006, MetaQuotes Software Corp. |
//| Программное обеспечение для торговли на рынке Форекс: Торговая платформа MetaTrader 4
//| Последнее небольшое изменение внесено Iin Zulkarnain | //| Copyright ?
//+------------------------------------------------------------------+
#property copyright "Copyright ?2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
//----
double CrossUp[];
double CrossDown[];
extern int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma
extern int FasterMA= 3;
extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMA= 3;
//+------------------------------------------------------------------+
//| Пользовательская функция инициализации индикатора |
//+------------------------------------------------------------------+
int init()
{
//---- индикаторы
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 233);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 234);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция деинициализации индикатора.
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция итерации индикатора |
//+------------------------------------------------------------------+
int start()
{
int limit, i, counter;
double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- последний подсчитанный бар будет пересчитан.
if(counted_bars>0) counted_bars--;
//----
limit=Bars-counted_bars;
for(i=0; i<=limit; i++)
{
counter=i;
Range=0;
AvgRange=0;
for(counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);
fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);
fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);
//----
slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);
slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);
slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);
if ((fasterMAnow > slowerMAnow) && (fasterMAprevious slowerMAafter))
{
CrossUp=Low - Range*0.5;
}
else if ((fasterMAnow slowerMAprevious) && (fasterMAafter < slowerMAafter))
{
CrossDown=High + Range*0.5;
}
}
return(0);
}
//+------------------------------------------------------------------+ эта тема для обучения правильному кодированию, я учусь кодировать дляКто-нибудь может помочь с кодом алерта для этого индикатора, он действительно классный.
Калькулятор Джорджа Оскара - Кто-нибудь может написать для него индикатор?
Привет, народ,
Я не знаю, знаком ли кто-нибудь с Forex Made-EZ Джорджа Смита.
В настоящее время я просматриваю его работы и хотел бы узнать, может ли кто-нибудь закодировать индикатор для осциллятора Oscar, который он использует?
Формула такова
пусть A = самый высокий максимум за последние восемь баров (включая этот)
пусть B = самый низкий минимум за последние восемь баров (включая этот)
пусть C = цена закрытия текущего бара
пусть X = предыдущая фигура осциллятора (Оскар).
Сегодняшний "грубый" осциллятор равен (C-B), разделенному на (A-B), умноженному на 100.
Далее мы "сглаживаем" наше грубое число (назовем его Y) следующим образом:
Окончательное число осциллятора = ((X деленное на 3) умноженное на 2), плюс (Y деленное на 3).
Если кто-либо кодировал или может кодировать это, буду очень признателен.
С уважением, Стив
Перевернутый трейлинг-стоп
Здравствуйте,
Мне нужна помощь с одной идеей.
Я использую трейлинг-стопы в своих советниках (3-ступенчатый трейлинг), но я хочу сделать перевернутый, чтобы защитить убытки.
Я попытаюсь объяснить:
Я открываю ордер с начальным стоп-лоссом.
Если сделка проходит 15 пунктов в направлении убытка и возвращается на 10 пунктов, я закрываю сделку (первый шаг).
Если сделка идет на 30 пунктов в направлении убытка и возвращается на 15 пунктов, закрываю сделку (второй шаг).
Примерно так.
Спасибо за помощь
Привет,
Мне нужна помощь с одной идеей.
Я использую трейлинг-стопы в своих советниках (3-ступенчатый трейлинг), но я хочу сделать перевернутую вещь, чтобы защитить потери.
Я попытаюсь объяснить:
Я открываю ордер с начальным стоп-лоссом.
Если сделка проходит 15 пунктов в направлении убытка и возвращается на 10 пунктов, я закрываю сделку (первый шаг).
Если сделка идет на 30 пунктов в направлении убытка и возвращается на 15 пунктов, закрываю сделку (второй шаг).
Что-то вроде этого.
Спасибо за помощьЭто что-то новое для меня.
Значит, при закрытии убыточной сделки всегда нужно ждать, пока она отскочит назад?
А если отскока не будет?
Будем ли мы закрываться по начальному SL?