Например глобальные переменные.
Зайдите в сервис - глобальные переменные. Там их можно менять.
Например глобальные переменные.
SymbolInfoDouble
Возвращает соответствующее свойство указанного символа. Существует 2 варианта функции.
1. Непосредственно возвращает значение свойства.
double SymbolInfoDouble(
string name, // символ
ENUM_SYMBOL_INFO_DOUBLE prop_id // идентификатор свойства
);
2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.
bool SymbolInfoDouble(
string name, // символ
ENUM_SYMBOL_INFO_DOUBLE prop_id, // идентификатор свойства
double& double_var // сюда примем значение свойства
);
Параметры
name
[in] Имя символа.
prop_id
[in] Идентификатор свойства символа. Значение может быть одним из значений перечисления ENUM_SYMBOL_INFO_DOUBLE.
double_var
[out] Переменная типа double, принимающая значение запрашиваемого свойства.
Возвращаемое значение
Значение типа double. В случае неудачного выполнения информацию об ошибкe можно получить с помощью функции GetLastError():
·4106 – символ не выбран в "Обзоре рынка" (нет в списке доступных),
·4051 – неверный идентификатор свойства символа,
·4024 – внутренняя ошибка.
Примечание
Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с момента подключения терминала к торговому счету не было еще ни одной котировки. В таком случае запрашиваемое значение будет неопределенным.
В большинстве случаев достаточно использовать функцию SymbolInfoTick(), которая позволяет получить за один вызов значения Ask, Bid, Last, Volume и время прихода последнего тика.
SYMBOL_MARGIN_INITIAL
Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия ордера объемом в один лот. Используется при проверке средств клиента при входе в рынок.
extern int _O_M1_iBuyBufIndex = 0; // индекс буфера со стрелками на покупку
extern int _O_M1_iSellBufIndex = 1; // индекс буфера со стрелками на продажу
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Green
//extern
bool Allert=true;
bool Istoriy = true;
bool Rsi=true;
bool Cci_1=true;
bool Cci_2=true;
bool Stoh=true;
bool DIMI=true;
int Rasst_Arrow=10;
int Up_arrow=234;
int Down_arrow=233;
int Shift=1;
string comm1="Параметры RSI";
int Period_RSI=8;
int Primenit_k_RSI=0;
double RSI_lewel_UP=70;
double RSI_lewel_DOWN=30;
string comm2="Параметры CCI_1";
int CCI_1_period=14;
int CCI_1_primenit_k=0;
extern double CCI_UP=120;
extern double CCI_DOWN=-120;
extern double DYMIL_UP=60;
extern double DYMIL_DOWN=40;
string comm3="Параметры CCI_2";
int CCI_2_period=7;
int CCI_2_primenit_k=0;
//extern
string comm4="Параметры Stoh";
int Period_K=5;
int ZAmedlenie=2;
int Period_D=3;
int Ceni =0;
int Metod_MA=0;
double Stoh_UP=80;
double Stoh_DOWN=20;
string comm5="Параметры Dymi";
int stdevLength = 5;
int avgOfStdevLength = 10;
int DYMILength = 30;
int DYMILengthLowerLimit = 3;
int DYMILengthUpperLimit = 30;
int Gi_84 = 24;
bool Gi_88 = FALSE;
double G_ibuf_92[];
double G_ibuf_96[];
int G_bars_100 = 0;
int Bbars;
double RSI,CCI_1,CCI_2,STOH_m,STOH_s,Dymil;
int n,n1,n2,n3,n4,n5;
int m,m1,m2,m3,m4,m5;
string c;
// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 3);
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 3);
SetIndexArrow(1, Down_arrow);
SetIndexArrow(0, Up_arrow);
SetIndexBuffer(0, G_ibuf_92);
SetIndexBuffer(1, G_ibuf_96);
G_bars_100 = Bars;
return (0);
}
// EA2B2676C28C0DB26D39331A336C6B92
int start() {
int Li_8 = IndicatorCounted();
if (Li_8 < 0) return (-1);
if (Li_8 > 0) Li_8--;
int Li_12 = Bars - 1;
if (Li_8 >= 1) Li_12 = Bars - Li_8 - 1;
if (Li_12 < 0) Li_12 = 0;
//Li_12=100;
if(Istoriy==true)
{
for (int Li_16 = Li_12; Li_16 >= 0; Li_16--) {
RSI=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,Period_RSI,Primenit_k_RSI,Li_16+Shift),4);
CCI_1=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_1_period,CCI_1_primenit_k,Li_16+Shift),4);
CCI_2=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_2_period,CCI_1_primenit_k,Li_16+Shift),4);
STOH_m=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,0,Li_16+Shift),4);
STOH_s=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,1,Li_16+Shift),4);
Dymil=NormalizeDouble(iCustom(Symbol(),PERIOD_CURRENT,"DYMI",stdevLength,avgOfStdevLength,DYMILength,DYMILengthLowerLimit,DYMILengthUpperLimit,0,Li_16+Shift),4);
if(Rsi)
{if(RSI>RSI_lewel_UP)n1=1;else n1=0;
}else n1=1;
if(Cci_1)
{if(CCI_1>CCI_UP)n2=1;else n2=0;
}else n2=1;
if(Cci_2)
{if(CCI_2>CCI_UP)n3=1;else n3=0;
}else n3=1;
if(Stoh)
{if(STOH_m>Stoh_UP&&STOH_s>Stoh_UP)n4=1;else n4=0;
}else n4=1;
if(DIMI)
{if (Dymil>DYMIL_UP)n=1;else n=0;
}else n=1;
n5=n1*n2*n3*n4*n;
if(n5>0 )
{G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;}
//////////////////////////////////////////////////////////////////////////////////////////////////
if(Rsi)
{if(RSI<RSI_lewel_DOWN)m1=1;else m1=0;
}else m1=1;
if(Cci_1)
{if(CCI_1<CCI_DOWN)m2=1;else m2=0;
}else m2=1;
if(Cci_2)
{if(CCI_2<CCI_DOWN)m3=1;else m3=0;
}else m3=1;
if(Stoh)
{if(STOH_m<Stoh_DOWN&&STOH_s<Stoh_DOWN)m4=1;else m4=0;
}else m4=1;
if(DIMI)
{if (Dymil<DYMIL_DOWN)m=1;else m=0;
}else m=1;
m5=m1*m2*m3*m4*m;
if(m5>0 )
{G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;}
//
}
}
/////////////////////////////////////
if(n5>0 )
{G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;
c=Symbol()+" "+f0_0(Seconds())+"Sell!";
if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
}
if(m5>0 )
{G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;
c=Symbol()+" "+f0_0(Seconds())+"Buy!";
if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
}
return (0);
}
// 9B1AEE847CFB597942D106A4135D4FE6
int f0_1() {
bool Li_ret_0 = FALSE;
if (G_bars_100 != Bars) {
Li_ret_0 = TRUE;
G_bars_100 = Bars;
Gi_88 = TRUE;
}
return (Li_ret_0);
}
// 945D754CB0DC06D04243FCBA25FC0802
string f0_0(int Ai_0) {
if (Ai_0 == 60) return ("M1");
if (Ai_0 == 300) return ("M5");
if (Ai_0 == 900) return ("M15");
if (Ai_0 == 1800) return ("M30");
if (Ai_0 == 3600) return ("H1");
if (Ai_0 == 14400) return ("H4");
if (Ai_0 == 86400) return ("D1");
if (Ai_0 == 604800) return ("W1");
if (Ai_0 == 1619200) return ("MN1");
return ("");
}
double Imaxx(int Per)
{double perr;
perr = NormalizeDouble (iHigh(Symbol(),0,Per),Digits);
return (perr);
}
//---Миниму--//
double Iminn(int Per)
{double perr;
perr = NormalizeDouble (iLow(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена открытия--//
double Cotkr(int Per)
{double perr;
perr = NormalizeDouble (iOpen(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена закрытия--//
double Czakr(int Per)
{double perr;
perr = NormalizeDouble (iClose(Symbol(),0,Per),Digits);
return (perr);
}
Alexandeer писал(а):Здравствуйте, я не так давно начал программировать на MQL4 и я не смог найти решения для пары проблем:
2) Когда тестишь советники открывается по умолчанию окно визуализации, со следующими настройками:
сетка, не красивые одноцветные бары. Короче как задать настройки для графика таким образом, что бы каждый раз при открытии графика они сохранялись?
Уверен, что на такие вопросы уже тысячу раз отвечено, но я честно не смог найти, я на форме искал и гуглил.
ВЯЧЕСЛАВПЕТРОВ писал(а):Можно создать в момент работы советника дополнительную глобальную переменную изменять ее в свойствах и удалять.
Читал как работать с файлами и не понял как удалять строки в текстовом файле.
Как я понял скрипт и советник могут работать на одной паре одновременно, а два советника не могут.
YURIY007 писал(а):Почему не могут, два советника могут работать главное чтобы у них были разные магик исе будет работать вешал на одну пару даже три робота по разных тс, так как я не профи в програмировании, то написал советники по разным стратегиям , а обединить в один что-то не получается.
tatarin писал(а):Помогите разобраться с буферами индикатора.
Нашел интересный гибридный стрелочник на 5 разных индикаторах, там 2 буфера.
Пробовал использовать его сигналы на известном шаблонном советнике exp_iCustom_v9_Martingale, которому надо указать номер буферов для покупки и продажи. Так вот, продажи проходят, а покупки - нет. Метод подбора не помог.
Для продажи используется буфер 0.
Вот кусок кода советника:
- Код: выделить все
extern int _O_M1_iBuyBufIndex = 0; // индекс буфера со стрелками на покупку
extern int _O_M1_iSellBufIndex = 1; // индекс буфера со стрелками на продажу
А вот полный код индикатора:
- Код: выделить все
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Green
//extern
bool Allert=true;
bool Istoriy = true;
bool Rsi=true;
bool Cci_1=true;
bool Cci_2=true;
bool Stoh=true;
bool DIMI=true;
int Rasst_Arrow=10;
int Up_arrow=234;
int Down_arrow=233;
int Shift=1;
string comm1="Параметры RSI";
int Period_RSI=8;
int Primenit_k_RSI=0;
double RSI_lewel_UP=70;
double RSI_lewel_DOWN=30;
string comm2="Параметры CCI_1";
int CCI_1_period=14;
int CCI_1_primenit_k=0;
extern double CCI_UP=120;
extern double CCI_DOWN=-120;
extern double DYMIL_UP=60;
extern double DYMIL_DOWN=40;
string comm3="Параметры CCI_2";
int CCI_2_period=7;
int CCI_2_primenit_k=0;
//extern
string comm4="Параметры Stoh";
int Period_K=5;
int ZAmedlenie=2;
int Period_D=3;
int Ceni =0;
int Metod_MA=0;
double Stoh_UP=80;
double Stoh_DOWN=20;
string comm5="Параметры Dymi";
int stdevLength = 5;
int avgOfStdevLength = 10;
int DYMILength = 30;
int DYMILengthLowerLimit = 3;
int DYMILengthUpperLimit = 30;
int Gi_84 = 24;
bool Gi_88 = FALSE;
double G_ibuf_92[];
double G_ibuf_96[];
int G_bars_100 = 0;
int Bbars;
double RSI,CCI_1,CCI_2,STOH_m,STOH_s,Dymil;
int n,n1,n2,n3,n4,n5;
int m,m1,m2,m3,m4,m5;
string c;
// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 3);
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 3);
SetIndexArrow(1, Down_arrow);
SetIndexArrow(0, Up_arrow);
SetIndexBuffer(0, G_ibuf_92);
SetIndexBuffer(1, G_ibuf_96);
G_bars_100 = Bars;
return (0);
}
// EA2B2676C28C0DB26D39331A336C6B92
int start() {
int Li_8 = IndicatorCounted();
if (Li_8 < 0) return (-1);
if (Li_8 > 0) Li_8--;
int Li_12 = Bars - 1;
if (Li_8 >= 1) Li_12 = Bars - Li_8 - 1;
if (Li_12 < 0) Li_12 = 0;
//Li_12=100;
if(Istoriy==true)
{
for (int Li_16 = Li_12; Li_16 >= 0; Li_16--) {
RSI=NormalizeDouble(iRSI(Symbol(),PERIOD_CURRENT,Period_RSI,Primenit_k_RSI,Li_16+Shift),4);
CCI_1=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_1_period,CCI_1_primenit_k,Li_16+Shift),4);
CCI_2=NormalizeDouble(iCCI(Symbol(),PERIOD_CURRENT,CCI_2_period,CCI_1_primenit_k,Li_16+Shift),4);
STOH_m=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,0,Li_16+Shift),4);
STOH_s=NormalizeDouble(iStochastic(Symbol(),PERIOD_CURRENT,Period_K,Period_D,ZAmedlenie,Metod_MA,Ceni,1,Li_16+Shift),4);
Dymil=NormalizeDouble(iCustom(Symbol(),PERIOD_CURRENT,"DYMI",stdevLength,avgOfStdevLength,DYMILength,DYMILengthLowerLimit,DYMILengthUpperLimit,0,Li_16+Shift),4);
if(Rsi)
{if(RSI>RSI_lewel_UP)n1=1;else n1=0;
}else n1=1;
if(Cci_1)
{if(CCI_1>CCI_UP)n2=1;else n2=0;
}else n2=1;
if(Cci_2)
{if(CCI_2>CCI_UP)n3=1;else n3=0;
}else n3=1;
if(Stoh)
{if(STOH_m>Stoh_UP&&STOH_s>Stoh_UP)n4=1;else n4=0;
}else n4=1;
if(DIMI)
{if (Dymil>DYMIL_UP)n=1;else n=0;
}else n=1;
n5=n1*n2*n3*n4*n;
if(n5>0 )
{G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;}
//////////////////////////////////////////////////////////////////////////////////////////////////
if(Rsi)
{if(RSI<RSI_lewel_DOWN)m1=1;else m1=0;
}else m1=1;
if(Cci_1)
{if(CCI_1<CCI_DOWN)m2=1;else m2=0;
}else m2=1;
if(Cci_2)
{if(CCI_2<CCI_DOWN)m3=1;else m3=0;
}else m3=1;
if(Stoh)
{if(STOH_m<Stoh_DOWN&&STOH_s<Stoh_DOWN)m4=1;else m4=0;
}else m4=1;
if(DIMI)
{if (Dymil<DYMIL_DOWN)m=1;else m=0;
}else m=1;
m5=m1*m2*m3*m4*m;
if(m5>0 )
{G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;}
//
}
}
/////////////////////////////////////
if(n5>0 )
{G_ibuf_92[Li_16] =Imaxx(Li_16)+Rasst_Arrow*Point;
c=Symbol()+" "+f0_0(Seconds())+"Sell!";
if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
}
if(m5>0 )
{G_ibuf_96[Li_16] =Iminn(Li_16)-Rasst_Arrow*Point;
c=Symbol()+" "+f0_0(Seconds())+"Buy!";
if(Allert&&Bbars!=Bars){Alert(c);Bbars=Bars;}
}
return (0);
}
// 9B1AEE847CFB597942D106A4135D4FE6
int f0_1() {
bool Li_ret_0 = FALSE;
if (G_bars_100 != Bars) {
Li_ret_0 = TRUE;
G_bars_100 = Bars;
Gi_88 = TRUE;
}
return (Li_ret_0);
}
// 945D754CB0DC06D04243FCBA25FC0802
string f0_0(int Ai_0) {
if (Ai_0 == 60) return ("M1");
if (Ai_0 == 300) return ("M5");
if (Ai_0 == 900) return ("M15");
if (Ai_0 == 1800) return ("M30");
if (Ai_0 == 3600) return ("H1");
if (Ai_0 == 14400) return ("H4");
if (Ai_0 == 86400) return ("D1");
if (Ai_0 == 604800) return ("W1");
if (Ai_0 == 1619200) return ("MN1");
return ("");
}
double Imaxx(int Per)
{double perr;
perr = NormalizeDouble (iHigh(Symbol(),0,Per),Digits);
return (perr);
}
//---Миниму--//
double Iminn(int Per)
{double perr;
perr = NormalizeDouble (iLow(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена открытия--//
double Cotkr(int Per)
{double perr;
perr = NormalizeDouble (iOpen(Symbol(),0,Per),Digits);
return (perr);
}
//--Цена закрытия--//
double Czakr(int Per)
{double perr;
perr = NormalizeDouble (iClose(Symbol(),0,Per),Digits);
return (perr);
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения