Полезные функции от KimIV - страница 83

 
А можно добавить в i-Sessions ещё ночную сессию, типа с 23 до 01, т.е. добавить я сам смогу, но как перейти через 00. часов ? Помогите пожалуйста!!!
 
Помогите переделать советник e-TFL_v2!

Как сделать чтобы советник открывал не одну позицию, а сразу 2 или 3 в одном направлении. Т.е. чтобы, к примеру, открывал не 1 лот, а две однонаправленные позиции в 0,5 и 0,5 лота? Или 0,3+0,3+0,3 лота.
 
Подскажите как настроить терминал, чтоб при переключении его на русский язык все и было написано по русски, а то у меня все пишется иероглифами какими-то.
 
arvis >>:
Подскажите как настроить терминал, чтоб при переключении его на русский язык все и было написано по русски, а то у меня все пишется иероглифами какими-то.

В региональных установках windows установите русский язык для использования в приложениях, которые не используют Unicode.

 

Всем здравствуйте! У меня вопрос, наверное, непосредственно Игорю Киму, поскольку он является автором (если я не ошибаюсь) индикатора i-SignalOfTrade.

Индикатор выполняет все свои функции отлично, но при отправке электронного сообщения в журнале возникают следующие записи

Mail: 'i-SignalOfTrade' failed

Mail: 451 See http://pobox.com/~djb/docs/smtplf.html.

ну и естественно, сообщение никуда не уходит.

Подскажите, в чём может быть загвоздка и как её исправить?

P.S. Почтовый клиент настроен корректно, тестовые сообщения отправляются и доставляются без проблем.

 

Добрый день. Подскажите, кто знает. Я работаю с индексом РТС. Размер позиции рассчитывает сторонняя программа и через тхт-файл передает его в Советник. И тут у меня возникли 2 проблемы:

1. т.к. блок start {...} запускается только с приходом нового тика, а тики в индексе идут редко, то возникает задержка с исполнением Советника.

Я повесил Советника на более часто тикающий инструмент ( EURUSD), но всё-таки спрошу - есть ли возможность принудительно запускать start {...}?

2. максимальный размер позиции, разрешенный брокером, равет 20 лотам. Мне надо открыть позицию в 100 лотов. Сейчас я открываю последовательно,

но на это уходит много времени, примерно 4 сек. на ордер. ( т.е. открытие позиции занимает 20 сек.), а иногда это плохо. Есть ли способ сделать это быстрее? (через заранее выставленные стоп-ордера - мне не подходит).

 
ADI1966 >>:

2. максимальный размер позиции, разрешенный брокером, равет 20 лотам. Мне надо открыть позицию в 100 лотов. Сейчас я открываю последовательно,

но на это уходит много времени, примерно 4 сек. на ордер. ( т.е. открытие позиции занимает 20 сек.), а иногда это плохо. Есть ли способ сделать это быстрее? (через заранее выставленные стоп-ордера - мне не подходит).

https://forum.mql4.com/ru/13567
 
kombat писал(а) >>
https://forum.mql4.com/ru/13567

прочитал.

я правильно понял, что советник на одном тике отправит в торговую систему несколько ордеров на покупку одновременно,

а не будет ждать ответа сервера о принятии и исполнении первого ордера, затем второго, и т.д. ??

у меня пока идет так - пример -(записи в журнале, реальный счет, реальное время)

10.55.13 - order buy market 20 RTS - это первые 20 лотов

10.55.13 - request was assepted by server

10.55.13 - request in process

10.55.17 - order was opened

10.55.18 - order buy market 20 RTS - это вторые 20 лотов

10.55.18 - request was assepted by server

10.55.19 - request in process

10.55.22 - order was opened

10.55.23 - order buy market 20 RTS - это третьи 20 лотов

10.55.23 - request was assepted by server

10.55.24 - request in process

10.55.27 - order was opened

а мне бы хотелось, чтобы вся позиция открылась за первые 4 сек, т.е. до 10.55.17

 
ADI1966 писал(а) >>

2. максимальный размер позиции, разрешенный брокером, равет 20 лотам. Мне надо открыть позицию в 100 лотов. Сейчас я открываю последовательно,

но на это уходит много времени, примерно 4 сек. на ордер. ( т.е. открытие позиции занимает 20 сек.), а иногда это плохо. Есть ли способ сделать это быстрее? (через заранее выставленные стоп-ордера - мне не подходит).

Запусти 4 терминала, 4 запроса тогда попадут дилеру на обработку сразу, а не поочередно.

 

Игорь, здравствуйте!

Подскажите пожалуйста, как можно внедрить в существующий индикатор звуковое оповещение.

Например в ZigZag. Где и как его можно прописать, чтобы звуковое сопровождение было в момент отрисовки новой линии:

//+------------------------------------------------------------------+
//| Zigzag.mq4 |
//| Copyright © 2005-2007, MetaQuotes Software Corp. |
//| https://www.metaquotes.net// |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net//"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
//---- indicator buffers
double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];
int level=3; // recounting's depth
bool downloadhistory=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
SetIndexBuffer(0,ZigzagBuffer);
SetIndexBuffer(1,HighMapBuffer);
SetIndexBuffer(2,LowMapBuffer);
SetIndexEmptyValue(0,0.0);

//---- indicator short name
IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int i, counted_bars = IndicatorCounted();
int limit,counterZ,whatlookfor;
int shift,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;

if (counted_bars==0 && downloadhistory) // history was downloaded
{
ArrayInitialize(ZigzagBuffer,0.0);
ArrayInitialize(HighMapBuffer,0.0);
ArrayInitialize(LowMapBuffer,0.0);
}
if (counted_bars==0)
{
limit=Bars-ExtDepth;
downloadhistory=true;
}
if (counted_bars>0)
{
while (counterZ<level && i<100)
{
res=ZigzagBuffer[i];
if (res!=0) counterZ++;
i++;
}
i--;
limit=i;
if (LowMapBuffer[i]!=0)
{
curlow=LowMapBuffer[i];
whatlookfor=1;
}
else
{
curhigh=HighMapBuffer[i];
whatlookfor=-1;
}
for (i=limit-1;i>=0;i--)
{
ZigzagBuffer[i]=0.0;
LowMapBuffer[i]=0.0;
HighMapBuffer[i]=0.0;
}
}

for(shift=limit; shift>=0; shift--)
{
val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=LowMapBuffer[shift+back];
if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;
}
}
}
if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;
//--- high
val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=HighMapBuffer[shift+back];
if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;
}
}
}
if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;
}

// final cutting
if (whatlookfor==0)
{
lastlow=0;
lasthigh=0;
}
else
{
lastlow=curlow;
lasthigh=curhigh;
}
for (shift=limit;shift>=0;shift--)
{
res=0.0;
switch(whatlookfor)
{
case 0: // look for peak or lawn
if (lastlow==0 && lasthigh==0)
{
if (HighMapBuffer[shift]!=0)
{
lasthigh=High[shift];
lasthighpos=shift;
whatlookfor=-1;
ZigzagBuffer[shift]=lasthigh;
res=1;
}
if (LowMapBuffer[shift]!=0)
{
lastlow=Low[shift];
lastlowpos=shift;
whatlookfor=1;
ZigzagBuffer[shift]=lastlow;
res=1;
}
}
break;
case 1: // look for peak
if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
{
ZigzagBuffer[lastlowpos]=0.0;
lastlowpos=shift;
lastlow=LowMapBuffer[shift];
ZigzagBuffer[shift]=lastlow;
res=1;
}
if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
{
lasthigh=HighMapBuffer[shift];
lasthighpos=shift;
ZigzagBuffer[shift]=lasthigh;
whatlookfor=-1;
res=1;
}
break;
case -1: // look for lawn
if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
{
ZigzagBuffer[lasthighpos]=0.0;
lasthighpos=shift;
lasthigh=HighMapBuffer[shift];
ZigzagBuffer[shift]=lasthigh;
}
if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
{
lastlow=LowMapBuffer[shift];
lastlowpos=shift;
ZigzagBuffer[shift]=lastlow;
whatlookfor=1;
}
break;
default: return;
}
}

return(0);
}
//+------------------------------------------------------------------+