Привет
Я использую следующий интерьер, который хорошо работает сам по себе, печатая стрелки и т. Д. Пример кода ниже.
#свойство indior_chart_window
#свойство indior_buffers 2
#property indior_color1 Лайм
#свойство indior_width1 1
#property indior_color2 Желтый
#свойство indior_width2 1
extern bool UseAlert = true;
внешний интервал BarsToCount = 1000;
двойной SarUpSig[];
двойной SarDownSig[];
дата и время ТТ;
int инициализация ()
{
//---- в помещении
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow (0,233);
SetIndexBuffer(0,SarUpSig);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow (1234);
SetIndexBuffer(1,SarDownSig);
TT=iTime(Символ(),0,0);
//----
возврат (0);
}
начало ()
{
внутренний предел;
int counted_bars = IndiorCounted();
//---- будет пересчитан последний посчитанный бар
if(counted_barsgt;0) counted_bars--;
limit=бары-counted_bars;
//---- macd посчитал в 1-м буфере
если(Период()!=ПЕРИОД_H1)
{
возврат (0);
}
если (BarsToCount lt; лимит)
лимит = BarsToCount;
for(int i=limit; igt;=0; i--)
{
дата и время = iTime (символ (), 0, я);
int shiftD1 = iBarShift(Symbol(), PERIOD_D1, время, ложь);
int shiftH4 = iBarShift(Symbol(), PERIOD_H4, время, ложь);
int shiftH1 = iBarShift(Symbol(),PERIOD_H1,время,ложь);
двойной OsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 );
двойной OsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1) ;
двойной POsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 1);
двойной POsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1 1);
//double Up_ST = iCustom(Symbol(),0,4xRider STRONG-TREND Signal v2,14,2,i);
//double Dn_ST = iCustom(Symbol(),0,4xRider STRONG-TREND Signal v2,14,1,i);
двойной SARD1 = iSAR(Symbol(),PERIOD_D1,0.22,0.2,shiftD1);
двойной SARH4 = iSAR(Symbol(),PERIOD_H4,0.05,0.2,shiftH4);
двойной SARH1 = iSAR(Symbol(),PERIOD_H1,0.01,0.2,shiftH1);
//двойной SARпоследний = iSAR(Symbol(),0,0.02,0.2,i 1);
двойной ЗАКРЫТ1 = iClose(Symbol(),PERIOD_D1,shiftD1);
двойной CLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4);
двойной CLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1);
двойной PSARD1 = iSAR(Symbol(),PERIOD_D1,0.22,0.2,shiftD1 1);
двойной PSARH4 = iSAR(Symbol(),PERIOD_H4,0.05,0.2,shiftH4 1);
двойной PSARH1 = iSAR(Symbol(),PERIOD_H1,0.01,0.2,shiftH1 1);
//двойной SARпоследний = iSAR(Symbol(),0,0.02,0.2,i 1);
двойной PCLOSED1 = iClose(Symbol(),PERIOD_D1,shiftD1 1);
двойной PCLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4 1);
двойной PCLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1 1);
SarUpSig[i]=EMPTY_VALUE;
SarDownSig[i]=EMPTY_VALUE;
струнная покупка;
//КУПИТЬ
//если(Up_ST!=EMPTY_VALUE)
//{
//SarUpSig[1] = 1,6094;
if(SarUpSig[i 1] != EMPTY_VALUE SARH1lt;CLOSEH1 OsMa2gt;0 SARH4lt;CLOSEH4)
{
SarUpSig[i] = SARH1;
если(TT!=iTime(Symbol(),0,0)UseAlert)
{
//строка time = TimeToStr(TimeCurrent());
Предупреждение (4xRider (КУПИТЬ) Символ ());
Воспроизведение звука (предупреждение.wav);
TT=iTime(Символ(),0,0);
}
}
если((PSARH4gt;PCLOSEH4POsMa1lt;0PSARH1gt;PCLO SEH1)
(SARH4lt;CLOSEH4OsMa1gt;0SARH1lt;CLOSEH1SARD1lt;З АКРЫТ1) OsMa2gt;0)
{
SarUpSig[i] = SARH1;
покупка = торговля;
если(TT!=iTime(Symbol(),0,0)UseAlert)
{
//строка time = TimeToStr(TimeCurrent());
Предупреждение (4xRider (КУПИТЬ) Символ ());
Воспроизведение звука (предупреждение.wav);
TT=iTime(Символ(),0,0);
}
}
//}
продажа строки;
//ПРОДАВАТЬ
//если(Dn_ST!=EMPTY_VALUE)
//{
if(SarDownSig[i 1] != EMPTY_VALUE SARH1gt;CLOSEH1 OsMa2lt;0 SARH4gt;CLOSEH4)
{
SarDownSig[i] = SARH1;
если(TT!=iTime(Symbol(),0,0)UseAlert)
{
//строка time = TimeToStr(TimeCurrent());
Предупреждение (4xRider (ПРОДАТЬ) Символ());
Воспроизведение звука (предупреждение.wav);
TT=iTime(Символ(),0,0);
}
}
если((PSARH4lt;PCLOSEH4POsMa1gt;0PSARH1lt;PCLO SEH1)
(SARH4gt;ЗАКРЫТЬH4OsMa1lt;0SARH1gt;ЗАКР ЫТЬH1SARD1gt;ЗАКРЫТО1) OsMa2lt;0)
{
SarDownSig[i] = SARH1;
если(TT!=iTime(Symbol(),0,0)UseAlert)
{
//строка time = TimeToStr(TimeCurrent());
Предупреждение (4xRider (ПРОДАТЬ) Символ());
Воспроизведение звука (предупреждение.wav);
TT=iTime(Символ(),0,0);
}
}
//}
//ПРОДАВАТЬ
}
//----
//Комментарий(От indior: , DoubleToStr(SarUpSig[1], Digits));
возврат (0);
}
Я использую советник для чтения значений следующим образом.
#define ИНДИ MyIndior
двойной IndiUpVal = iCustom (NULL, 0, INDI, ложь, 5, 0, 1);
двойной IndiDownVal = iCustom (NULL, 0, INDI, ложь, 5, 1, 1);
Комментарий(IndiUpVal: D2S(IndiUpVal) . IndiUpVal: D2S(IndiDownVal));
D2S = DoubleToString с цифрой
Что бы я ни делал, iCustom возвращает EMPTY_VAL.
Если я распечатаю значение изнутри в нужное время SarUpSig[1]
вернет правильные значения. Но iCustom всегда дает EMPTY_VAL.
Почему?
Любая помощь приветствуется.