АвторСообщение



Сообщение: 1
Зарегистрирован: 05.03.13
Репутация: 0
ссылка на сообщение  Отправлено: 05.03.13 08:23. Заголовок: помогите с кодом


Пишу индикатор, который рисует линии типа зиг заг на основе анализа уже имеющихся экстремумов зиг зага.
Сначала экстремумы собираю в буфера.
А вот далее нужно сравнивать пики и впадины и если, например, пики понижаются, то линия зиг зага должна рисоваться вниз, а если впадины повышаются, линия зиг зага идет вверх.
Написал вот так:
for(int i=0; i<100; i++)
{
double up = iCustom(NULL,0,"ZZ", 0, i);
double dw = iCustom(NULL,0,"ZZ", 1, i);
if(up!=2147483647) UP = High;
if(dw!=2147483647) DW = Low;

int countUP = ArraySize(UP);
int countDW = ArraySize(DW);

for(int u=0; u<countUP; u++)
{
if(UP<UP[u+1])
{
bufDn=UP;
bufUp=EMPTY_VALUE;
}
}
for(int d=0; d<countDW; d++)
{
if(DW[d]>DW[d+1])
{
bufUp=DW[d];
bufDn=EMPTY_VALUE;
}
}
}
Результат - нулевой. Подскажите, где я ошибаюсь.
Заранее - большое спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 49 , стр: 1 2 3 4 All [только новые]







Сообщение: 7
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 24.05.15 14:49. Заголовок: Здравствуйте!!! Пожа..


Здравствуйте!!! Пожалуйста помогите с кодом?!

if (AccountNumber()) tradetrue = TRUE;
else {
Alert("Password wrong. Please Contact ****@***.com");
tradetrue = FALSE;
return (0);


Этот код работает на советников(для аккаунт лок). Но он не работает при индикаторов. Как его могу работать на индикаторе?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1560
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 24.05.15 15:59. Заголовок: Добрый день. Указанн..


Добрый день.
Указанный код будет одинаково работать как в советнике, так и в индикаторе. Причем вне зависимости от номера счета не будет происходить прерывание работы программы. Ведь значение AccountNumber, кроме некоторых специфических случаев, всегда более нуля. Любое значение больше нуля рассматривается компилятором как истинное значение.
Нужно сделать так:

 цитата:

#property strict
#define CORRECT_ACCOUNT_NUMBER 123456

int OnInit()
{
if (AccountNumber() != CORRECT_ACCOUNT_NUMBER)
{
Alert("Password wrong. Please Contact ****@***.com");
return INIT_FAILED;
}

return INIT_SUCCEEDED;
}


Будет работать в любой программе MQL4: при неверном номере счета программа автоматически удалится с графика.

Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 8
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 24.05.15 21:08. Заголовок: Спасибо за быстрая о..


Спасибо за быстрая ответа!!!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 9
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 27.12.15 12:51. Заголовок: Пожалуйста помогите с кодом?!



Здравствуйте, мой учитель Scriptong! Пожалуйста, помогите с кодом?! У меня есть индикатор со стрелками. Но без буферов. Мне надо получить сигнал для советника, который открывает сделку, используя эти стрелки. Индикатор только с ех4 формате: Indicator
Как я могу получит сигнал от графика? Подскажите мне пожалуйста?!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Сообщение: 2168
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 27.12.15 15:35. Заголовок: skilful_coder пишет:..


skilful_coder пишет:

 цитата:
Пожалуйста, помогите с кодом?! У меня есть индикатор со стрелками. Но без буферов. Мне надо получить сигнал
для советника, который открывает сделку, используя эти стрелки. Индикатор только с ех4 формате: Indicator



Возможно у Игоря новогодние каникулы , попробую Вам помочь:

Этот вопрос обсуждался здесь: http://forum.mql4.com/ru/47117. Только у Вашего
индикатора другое имя: scalping_future. Продолжение было здесь: https://www.mql5.com/ru/code/10675

Еще один вариант исходника этого индикатора: http://www.fxfisherman.com/forums/forex-metatrader/indicators/11121-best-till-now.html

Если запустите торговлю на своем ЕА или ТарасаBY - расскажите, pls, какой будет результат?




 цитата:
Как я могу получит сигнал от графика? Подскажите мне пожалуйста?!


Недостаток при использовании графических сигналов: при оптимизации советник не может использовать данные от графических
объектов, это проблема такого подхода.

У Вас теперь есть исходный код - добавьте туда буфера. А сигнальные стрелки, которые Вам надо считывать, находятся в
таблице графических объектов.



Читать их менее удобно чем буфера, поэтому редко кто замарачивается чтением
графических объектов, можно получить этот сигнал считав и обработав данные от индикатора, как
указано в ссылке http://forum.mql4.com/ru/47117. :

int FilterPeriod = 22;
int SL_distance_pips = 20;

//+----------------------------------------------------------------------------+
//| Описание : Возвращает торговый сигнад |
//+----------------------------------------------------------------------------+
int GetSignal (string vSymbol, int fi_Bar = 5)
{
double ld_Signal_0 = iCustom (NULL, 0, "Arrow_2", FilterPeriod, SL_distance_pips, 0, 0),
ld_Signal_Bar = iCustom (NULL, 0, "Arrow_2", FilterPeriod, SL_distance_pips, 0, fi_Bar);
int vSignal = 0;
//----
if (ld_Signal_Bar <= -0.9 && ld_Signal_0 > -0.9) vSignal = 1; //up
if (ld_Signal_Bar >= 0.9 && ld_Signal_0 < 0.9) vSignal = -1; //down
//----
return (vSignal);
}

У Игоря есть примеры обработки сигналов графических объектов, например здесь чтение данных прямоугольника: http://www.admiralmarkets.ru/mqlabs/11.03.2014-mqlabs-pamyat-rynka-chast-5

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 10
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 27.12.15 13:55. Заголовок: Вот код советника: ..


Вот код советника:

#property version "1.00"
#property strict

input string NameEA = "Советник"; //EA Name
input double FixedLots = 0.1; //Lot Size
input double StopLoss = 20; //Stop Loss
input double TakeProfits = 20; //Take Profit
input int MagicNumber = 123; //Magic Number
input int MaxOpenOrders = 1; //Max.Open Orders
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
int PipValue=1,digit_lot=0,Lot_Digits;
double ClosingArray[100],Lots,Sloss,Tprof,point;
bool Buy=0,Sell=0,comm4=0;
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if((Bid<10 && _Digits==5)||(Bid>10 && _Digits==3)){PipValue= 10;}
if((Bid<10 && _Digits==4)||(Bid>10 && _Digits==2)){PipValue= 1;}
point = PipValue*Point;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=0.01) digit_lot=2;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=0.1) digit_lot=1;
if(MarketInfo(Symbol(),MODE_LOTSTEP)>=1) digit_lot=0;
return(INIT_SUCCEEDED);
}
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
//+------------------------------------------------------------------+
//| Get Signals |
//+------------------------------------------------------------------+
void Indicators(){

Buy = (iCustom(NULL,0,"Arrow 2",0,1) != 0);
Sell = (iCustom(NULL,0,"Arrow 2",1,1) != 0);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
//+------------------------------------------------------------------+
//| Lot Size |
//+------------------------------------------------------------------+
void LotsSize(){
Lots = FixedLots;
if(Lots<MarketInfo(Symbol(),MODE_MINLOT)) Lots=MarketInfo(Symbol(),MODE_MINLOT);
if(Lots>MarketInfo(Symbol(),MODE_MAXLOT)) Lots=MarketInfo(Symbol(),MODE_MAXLOT);
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){}

//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
//+------------------------------------------------------------------+
//| Get total order |
//+------------------------------------------------------------------+
int Orders(int type)
{
int count=0;
//-1= All,0=Buy,1=Sell,2=BuyLimit,3=SellLimit,4=BuyStop,5=SellStop;
for(int x=OrdersTotal()-1;x>=0;x--)
{
if(OrderSelect(x,MODE_TRADES)){
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(type < 0){ count++;}
if(OrderType() == type && type >= 0){ count++;}
}}}
return(count);
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
//+------------------------------------------------------------------+
//| Expert start function |
//+------------------------------------------------------------------+
void OnTick(){

LotsSize();Indicators();int num = Orders(-1);
//OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
bool band = 0,ban = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect (i, SELECT_BY_POS))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderOpenTime() >= iTime(NULL,0,0)) ban = true;
}}
if(ban){return;}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error in history!"); break;
}
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderOpenTime() >= iTime(NULL,0,0)) band = true;
}}
if(band){return;}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
if(num < MaxOpenOrders){
if(Buy){
if(StopLoss == 0){Sloss = 0;} else{
Sloss = Ask - StopLoss * point;}
if(TakeProfits == 0){Tprof = 0;}else{
Tprof = Bid + TakeProfits * point;}
int Tiketb = OrderSend(Symbol(),OP_BUY,Lots,Ask,3*PipValue,Sloss,Tprof,NameEA,MagicNumber,0,Blue);
}
if(Sell){
if(StopLoss == 0){Sloss = 0;}else{
Sloss = Bid + StopLoss * point;}
if(TakeProfits == 0){Tprof = 0;}else{
Tprof = Ask - TakeProfits * point;}
int Tikets = OrderSend(Symbol(),OP_SELL,Lots,Bid,3*PipValue,Sloss,Tprof,NameEA,MagicNumber,0,Red);
}}
return;
}


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 11
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 27.12.15 17:59. Заголовок: Дорогой Scriptong, т..


Дорогой Scriptong, теперь я только жду вашего ответа. Потому что ответ Genry не удовлетворяет меня.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1971
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 29.12.15 17:19. Заголовок: skilful_coder пишет:..


skilful_coder пишет:

 цитата:
Дорогой Scriptong, теперь я только жду вашего ответа. Потому что ответ Genry не удовлетворяет меня.


Genry дал исчерпывающий ответ, дав несколько ссылок на решение Вашего вопроса. По этим ссылкам даже советник готовый имеется (здесь). По сути же получение данных от индикатора сводится к следующей функции (из советника, приведенного по ссылке):

 цитата:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Автор : TarasBY |
//+-----------------------------------------------------------------------------------+
//| Возвращает торговый сигнад |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_Signal (string fs_Symbol, int fi_Bar = 5)
{
double ld_Signal_0 = iCustom (fs_Symbol, TF_Indicator, "scalping_future", FilterPeriod, SL_distance_pips, 0, 0), ld_Popravka = 0.3,
ld_Signal_Bar = iCustom (fs_Symbol, TF_Indicator, "scalping_future", FilterPeriod, SL_distance_pips, 0, fi_Bar);
int li_Signal = -1;
//----
if (ld_Signal_Bar <= -LevelControl && ld_Signal_0 > ld_Popravka - LevelControl) li_Signal = UP; //up
if (ld_Signal_Bar >= LevelControl && ld_Signal_0 < LevelControl - ld_Popravka) li_Signal = DW; //down
//----
return (li_Signal);
}


Вам нужно лишь заменить имя индикатора. А еще лучше - взять неперерисовывающуюся версию, которую представил тот же TarasBY. Ведь Ваша версия индикатора потому и хороша на истории, что в реальности меняет свои показания как заправский лжесвидетель.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 12
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 03.01.16 15:39. Заголовок: Здравствуйте учитель..


Здравствуйте учитель! Спасибо за ответ. Теперь у меня есть другое просьба. Пожалуйста помогите с кодом?! Пожалуйста посмотрите на этот картинок: Индикатор должен показать только первую стрелки (1-2-1-2-1-2). Остальное между 1 и 2 не надо показать. Как я могу кодироваться?!
индикаторы

Код:

//+-------------------------------------------------------------------+
//| Стрелка.mq4 |
//+-------------------------------------------------------------------+
#property copyright "NEW"
#property link "NEW"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 12
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_color5 Lime
#property indicator_color6 Red
#property indicator_color7 Lime
#property indicator_color8 Red

double CrossUp[];
double CrossDown[];

input string Parmetrs_indicator = "-------------------< SETTINGS >-------------------";//INDICATORS PARAMETERS
input string _________________________="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//____________Slope Direction Indicator
input int period = 34; //Period
input int method = 3; //Method
input int price = 0; //Price
input string ________________________="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//____________Average MACD Indicator
input int Price2 = 8; //Price
input int method2 = 5; //Fast Period
input int price2 = 13; //Slow Period
input int period2 = 7; //Signal Period
input int method3 = 1; //Method
input string __________________="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//_______Heiken Ashi Oscillator Indicator
input int Averageperiod = 2; //Average Period
input string ________________="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";//_________________Arrow settings
input bool ShowArrows = 1; //Show Arrows
input int arrowsUpCode = 233; //Arrows Up Code
input int arrowsDnCode = 234; //Arrows Dn Code
input int arrowsUpSize = 4; //Arrows Up Size
input int arrowsDnSize = 4; //Arrows Dn Size
input int gap = 5; //Gap
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int PipValue = 1,buy=0,sell=0;
double point; int Zap;
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init(){

if((Bid<10 && _Digits==5)||(Bid>10 && _Digits==3)) {PipValue=10;}
if((Bid<10 && _Digits==4)||(Bid>10 && _Digits==2)) {PipValue= 1;}
point = PipValue * Point;

SetIndexStyle(0, DRAW_ARROW, EMPTY,arrowsUpSize);
SetIndexArrow(0, arrowsUpCode);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY,arrowsDnSize);
SetIndexArrow(1, arrowsDnCode);
SetIndexBuffer(1, CrossDown);

return(0);}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
int limit,i;
double RSI,RSI1,RSI2,RSI12,RSI11,RSI3,
RSI6,RSI7,RSI10,RSI0,RSI8,RSI9,RSI20,RSI30,Slop,Slop2;
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++){
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Slop = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,0,i+1);
Slop2 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,0,i+2);
RSI = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,1,i+1);
RSI0 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,1,i+2);
RSI1 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,2,i+1);
RSI10 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,2,i+2);
RSI11 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,1,i+2);
RSI12 = iCustom(NULL,0,"SlopeDirection",period,method,price,0,0,2,i+2);
RSI2 = iCustom(NULL,0,"average_MACD_-_mtf_u_alerts2divergence"," ",Price2,method2,price2,period2,method3,0,0,0,LimeGreen,OrangeRed," ",1,1,0.005,0.0025,0.001,-0.001,-0.0025,-0.005,0,4,i+1);
RSI3 = iCustom(NULL,0,"average_MACD_-_mtf_u_alerts2divergence"," ",Price2,method2,price2,period2,method3,0,0,0,LimeGreen,OrangeRed," ",1,1,0.005,0.0025,0.001,-0.001,-0.0025,-0.005,0,4,i+2);
RSI20 = iCustom(NULL,0,"average_MACD_-_mtf_u_alerts2divergence"," ",Price2,method2,price2,period2,method3,0,0,0,LimeGreen,OrangeRed," ",1,1,0.005,0.0025,0.001,-0.001,-0.0025,-0.005,0,5,i+1);
RSI30 = iCustom(NULL,0,"average_MACD_-_mtf_u_alerts2divergence"," ",Price2,method2,price2,period2,method3,0,0,0,LimeGreen,OrangeRed," ",1,1,0.005,0.0025,0.001,-0.001,-0.0025,-0.005,0,5,i+2);
RSI6 = iCustom(NULL,0,"HeikenAshiOscillator",Averageperiod,0,i+2);
RSI7 = iCustom(NULL,0,"HeikenAshiOscillator",Averageperiod,0,i+1);
RSI8 = iCustom(NULL,0,"HeikenAshiOscillator",Averageperiod,1,i+2);
RSI9 = iCustom(NULL,0,"HeikenAshiOscillator",Averageperiod,1,i+1);
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
if (ShowArrows && (Slop < iClose(NULL,0,i+1) && RSI7 != 0.0 && RSI2 < 0.0 && RSI20 < RSI2 &&
((((iHigh(NULL,0,i+1) - iLow(NULL,0,i+1))*70)/100) + iLow(NULL,0,i+1)) < iClose(NULL,0,i+1)) && !(Slop2 < iClose(NULL,0,i+2) && RSI6 != 0.0 &&
RSI3 < 0.0 && RSI30 < RSI3 && ((((iHigh(NULL,0,i+2) - iLow(NULL,0,i+2))*70)/100) + iLow(NULL,0,i+2)) < iClose(NULL,0,i+2)))
{
CrossUp[i+1] = (iLow(NULL,0,i) - gap * point);
}
if (ShowArrows && (Slop > iClose(NULL,0,i+1) && RSI9 != 0.0 && RSI2 > 0.0 && RSI20 > RSI2 &&
((((iHigh(NULL,0,i+1) - iLow(NULL,0,i+1))*30)/100) + iLow(NULL,0,i+1)) > iClose(NULL,0,i+1)) && !(Slop2 > iClose(NULL,0,i+2) && RSI8 != 0.0 &&
RSI3 > 0.0 && RSI30 > RSI3 && ((((iHigh(NULL,0,i+2) - iLow(NULL,0,i+2))*30)/100) + iLow(NULL,0,i+2)) > iClose(NULL,0,i+2)))
{
CrossDown[i+1] = (iHigh(NULL,0,i) + gap * point);
}}
return(0);
}

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1986
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 05.01.16 11:57. Заголовок: skilful_coder пишет:..


skilful_coder пишет:

 цитата:
Индикатор должен показать только первую стрелки (1-2-1-2-1-2). Остальное между 1 и 2 не надо показать. Как я могу кодироваться?!


Нужно запомнить, какой тип стрелки был отображен последним, и, если новая стрелка совпадает по типу с предыдущей, то не выводить ее. То есть вот эти условия должны выглядеть примерно так:

 цитата:
if (ShowArrows && (Slop < iClose(NULL,0,i+1) && RSI7 != 0.0 && RSI2 < 0.0 && RSI20 < RSI2 &&
((((iHigh(NULL,0,i+1) - iLow(NULL,0,i+1))*70)/100) + iLow(NULL,0,i+1)) < iClose(NULL,0,i+1)) && !(Slop2 < iClose(NULL,0,i+2) && RSI6 != 0.0 &&
RSI3 < 0.0 && RSI30 < RSI3 && ((((iHigh(NULL,0,i+2) - iLow(NULL,0,i+2))*70)/100) + iLow(NULL,0,i+2)) < iClose(NULL,0,i+2)) && тип последней стрелки не равен "вверх")


и

 цитата:
if (ShowArrows && (Slop > iClose(NULL,0,i+1) && RSI9 != 0.0 && RSI2 > 0.0 && RSI20 > RSI2 &&
((((iHigh(NULL,0,i+1) - iLow(NULL,0,i+1))*30)/100) + iLow(NULL,0,i+1)) > iClose(NULL,0,i+1)) && !(Slop2 > iClose(NULL,0,i+2) && RSI8 != 0.0 &&
RSI3 > 0.0 && RSI30 > RSI3 && ((((iHigh(NULL,0,i+2) - iLow(NULL,0,i+2))*30)/100) + iLow(NULL,0,i+2)) > iClose(NULL,0,i+2)) && тип последней стрелки не "вниз")


а при выводе стрелки запоминать ее тип:

 цитата:

{
CrossUp[i+1] = (iLow(NULL,0,i) - gap * point);
тип последней стрелки - "вверх"
}


и

 цитата:
{
CrossDown[i+1] = (iHigh(NULL,0,i) + gap * point);
ти последней стрелки - "вниз"
}



Также Вам нужно будет учесть, что такой подход будет работать только на истории. Для второго и последующих тиков, которые индикатор обработает, нужно будет дополнительно по истории определять тип последней стрелки, т. е. еще до входа в основной цикл.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 13
Зарегистрирован: 05.01.15
Откуда: Узбекистан, Ташкент
Репутация: 0
ссылка на сообщение  Отправлено: 03.01.16 15:42. Заголовок: КАРТИНКА для пример..

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 380
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 06.01.16 17:48. Заголовок: Классно в обще-то! т..


Классно в обще-то!

Хорошо давай по другому.
Твой советник, 32 бита - МТ - как "очистить" память (исходные сохраняются)?
В тестере же память не накапливается.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1991
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 07.01.16 20:48. Заголовок: Balbesik пишет: Кла..


Balbesik пишет:

 цитата:
Классно в обще-то!

Хорошо давай по другому.
Твой советник, 32 бита - МТ - как "очистить" память (исходные сохраняются)?
В тестере же память не накапливается.


Это кому вопрос? О каком советнике идет речь?

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 386
Зарегистрирован: 13.03.13
Репутация: -1
ссылка на сообщение  Отправлено: 08.01.16 19:25. Заголовок: Scriptong пишет: О ..


Scriptong пишет:

 цитата:
О каком советнике идет речь?



Речь идет о твоем советнике с оптимизацией.
Оптимизация «сжирает» всю память, т.к. МТ4 32 бита и от компа не зависит.
Надо еще и результат оптимизации сохранить
(ну тут возможно, как-то через Глобальные удастся сохранить).

Scriptong пишет:

 цитата:
Это кому вопрос?



Ну к кому я могу обратиться в разделе Консультации по программированию?
Естественно к тебе Игорь.

Т.к. данный вопрос я поднимал уже и твой взгляд я знаю, то
вопрос тот же, но чуть по другому – меня интересует можно ли это сделать
и каким образом – с чего начать, а пробовать сделать я уж буду сам,
если только это средствами МКЛ.

Я так понимаю вопрос интересует только меня и тратить время на него тебя я не прошу.

Я даже близко не представляю, как решить эту задачу, но вижу,
что на другие вопросы (других участников форума) ты время находишь
вот и обратился за подсказкой.



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1997
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 11.01.16 23:30. Заголовок: Balbesik пишет: Реч..


Balbesik пишет:

 цитата:
Речь идет о твоем советнике с оптимизацией.
Оптимизация «сжирает» всю память, т.к. МТ4 32 бита и от компа не зависит.
Надо еще и результат оптимизации сохранить


Ясно.

Balbesik пишет:

 цитата:
Твой советник, 32 бита - МТ - как "очистить" память (исходные сохраняются)?
В тестере же память не накапливается.


В том то и дело, что никак. Из MQL4 невозможно заниматься очисткой памяти. Это все делает сам терминал (тестер, если речь о работе в нем). Но тестер - универсальная штука, которую невозможно использовать наиболее оптимальным образом. А потому тестер во время своей работы не может определить, какие данные в памяти являются лишними, а какие - нет. Вот и держит все это до конца тестирования. Память от предыдущего тестирования освобождается только при выключении тестера стратегий или при начале следующего тестирования.

Выход из ситуации мне видится лишь один, и я о нем тебе говорил еще пару лет назад - уйти от использования вызова индикаторов через iCustom. Именно это является той дорогой составляющей, на которую и тратится 90% памяти. Для этого нужно определиться с кругом используемых индикаторов и включить их в код советника в виде функций. Кроме решения проблем с памятью, это приведет к некоторому росту производительности программы.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 49 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет