Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 589

 
Здравствуйте Господа! У меня возникла небольшая проблемка в написании советника(( советник открывает отложенные ордера в большинстве случаев все нормально но иногда открыть ордера нужно очень близко к текущей цене, так вот как прописать что бы отложенные ордера открывались МАКСИМАЛЬНО близко из возможного?
 
barudkinarseniy:
Здравствуйте Господа! У меня возникла небольшая проблемка в написании советника(( советник открывает отложенные ордера в большинстве случаев все нормально но иногда открыть ордера нужно очень близко к текущей цене, так вот как прописать что бы отложенные ордера открывались МАКСИМАЛЬНО близко из возможного?
Вроде разобрался) Если кому интересно получилось вот так
 double ilow = iLow(Symbol(),TimeFrames_3,1);
 double ihigh = iHigh(Symbol(),TimeFrames_3,1);
 
 double OpenPriceBuy = NormalizeDouble(MathMax(ihigh,Ask + Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 double OpenPriceSell = NormalizeDouble(MathMin(ilow,Bid - Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 
 int StepST = (int)MathMax(OpenPriceBuy - OpenPriceSell,SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL));
 double lots = LotsByRisk(StepST);
 
Artyom Trishkin:

Ну сколько можно повторять-то вам?

Смотрите: у вас w равна 10,
Проверяете w на равность 10: "if(w==10){co++; Alert(co);}" Как считаете, это выражение истинно?
Тогда почему вопрос у вас?

     Приношу свои извинения за дурацкий вопрос и благодарю Вас за Ваше терпение и понимание. Подвел механический перенос пробника if(w==10){ Alert(I,"/",F); по программе в поисках ошибки по шагам. Такое бывает, когда упираешься в стену  собственного не понимания причины, но стоит не надолго отстраниться от проблемы и вопрос решается как бы сам собой. И то, что воспринималось как "дребезг", на самом деле оказывается не учтенным запросом из другой части программы. С благодарностью, Владимир.

 

Здравствуйте, помогите, пожалуйста, с математикой.

Как узнать каким будет лот пятой позиции, если известен лот первoй и то, что лот каждой новой позиции увеличивается в арифметической прогрессии.

Второй вариант лот увеличивается с геометрической прогрессией.

 
mila.com:

Здравствуйте, помогите, пожалуйста, с математикой.

Как узнать каким будет лот пятой позиции, если известен лот первoй и то, что лот каждой новой позиции увеличивается в арифметической прогрессии.

Второй вариант лот увеличивается с геометрической прогрессией.

В гугле забанили? Сочувствую, за что вас так жестоко? ))

арифметическая прогрессия задана формулой

геометрическая прогрессия задана формулой 

 

Не соображаю, по идее для первого варианта достаточно первый лот умножить на 5, если увеличивается на старт лот

Для второго варианта: лот первой позиции* коэффициент*5 …но

 
mila.com:

Не соображаю, по идее для первого варианта достаточно первый лот умножить на 5

Для второго варианта лот первой позиции* коэффициент*5 …но

Да ничего, сам со школы математику забыл )) Откопал книгу по математике, перепечатываю определение ариф. прогрессии, тут понятнее написано.

-------------

Последовательность чисел, каждое из которых, начиная со второго, получается из предыдущего прибавлением постоянного числа d, называемого разность ариф. прогр.

Если первый член a1, то ариф. прогр. с длиной n имеет вид:

a1, a1+d, a1+2*d, ...., a1 + n*d

код на MQL вот такой, накидал простой примерчик

#define LEN 5 // задали длину последовательности

int start()
{
    int d = 4;    // это разность, любое значение
    int a[LEN];   // тут храним ариф. посл.
    a[0] = 3;     // любое стартовое значение, задаете сами
    Print(0, "  ", a[0]);

    for (int n = 1; n < 4; n++)
    {
       a[n] = a[0] + (n*d);
       Print(n, "  ", a[n]);
    }
}

2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 3  15
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 2  11
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 1  7
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 0  3
 
Alexey Volchanskiy:

Да ничего, сам со школы математику забыл ))

Пойду погуляю, потом код для геометрической прогр. напишу
 
Alexey Volchanskiy:
Пойду погуляю, потом код для геометрической прогр. напишу

Совсем я плохая, должно получиться 0.5.


#define LEN 5 // задали длину последовательности
double  start_lot=0.1;//начальный лот
int lot_5 =5;// номер искомой позиции
int start()
{
    int d = lot_5;    // это разность, любое значение
    int a[LEN];   // тут храним ариф. посл.
    a[0] = start_lot;     // любое стартовое значение, задаете сами
    Print(0, " начальный лот ", a[0]);

    for (int n = 1; n < 4; n++)
    {
       a[n] = a[0] + (n*d);
       Print(n, " лот позы№5 ", a[n]);
    }
}
 
mila.com:

Совсем я плохая, должно получиться 0.5.


Ради женщины можно и 0.5 :))

Геометрическую завтра пришлю. А там что надо получить, сразу напишите пожалуйста входной лот и конечное значение. 

#define LEN 5 // задали длину последовательности
double  start_lot=0.1;//начальный лот
double lot_5 = 0.1;   // это разность
int start()
{
    double a[LEN];   // тут храним ариф. посл.
    a[0] = start_lot;     // задаем стартовое значение 0.1
    Print(0, " начальный лот ", a[0]);

    for (int n = 1; n < LEN; n++)
    {
       a[n] = a[0] + (n*lot_5);
       Print(n, " лот позы №5 ", a[n]);
    }
}

2016.06.01 01:13:54.917 ChangeTimeFrame EURUSD.e,M1: 4 лот позы №5 0.5
2016.06.01 01:13:54.917 ChangeTimeFrame EURUSD.e,M1: 3 лот позы №5 0.4
2016.06.01 01:13:54.917 ChangeTimeFrame EURUSD.e,M1: 2 лот позы №5 0.3
2016.06.01 01:13:54.917 ChangeTimeFrame EURUSD.e,M1: 1 лот позы №5 0.2
2016.06.01 01:13:54.917 ChangeTimeFrame EURUSD.e,M1: 0 начальный лот 0.1