Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 71

 
trader781:

ок, делаем так

for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }

 правильно?

Скобки фигурные ещё нужны, а то сработает только первая строчка после if(). То у вас где не надо, скобок много, то там где они нужны, их нет. Это нарушает логику программы, иногда очень сильно. И счётчик не обязательно делать глобальным, но это не так важно.

for(i=OrdersTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
         && OrderMagicNumber()==Magic && OrderType()<2)
         {
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
         }
}
 
sile:
Помогите записать условие: если размер свободных средств на счёте менее 50% от депозита то {действие}  МТ5

От какого депозита? Начального? Или от текущего баланса?

Если сравнивать с балансом, то так:

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


так он вроде мт5 хотел

 

 

а по поводу моего, записать то кое как получилось, можно засунуть счетчик в самое начало онтик и далее уже с этим работать

теперь как оттуда что - то вытащить в моем случае?

и тем более если массив будет  двумерный и более (там отличия в записи и извлечении)

можно немного об этом моменте?
 
trader781:

ок, делаем так

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


 правильно?

Нет, не правильно.

У вас массив orders[] имеет нулевую величину. Куда собрались записывать данные? В массив с нулевым размером? Не выйдет. Нужно увеличивать размер массива на значение count1+1 - это если счётчик увеличиваете после записи в массив. Обычно счётчик увеличивают перед записью, затем увеличивают размер массива на размер счётчика, а далее уже по индексу [count1-1] записываете значения. И, как вам выше правильно заметили - нужно после проверки условий все остальные действия заключить в фигурные скобки.

Что ж вы так без элементарных знаний и представлений, пытаетесь что-то делать? Просто "на удачу"?

 
Здравствуйте. Есть ли универсальный код, который можно вставить в конце описания любого индикатора который позволял бы менять ТФ этого индикатора (т.е на М5 смотреть М1)?
 
Artyom Trishkin:

Нет, не правильно.

У вас массив orders[] имеет нулевую величину. Куда собрались записывать данные? В массив с нулевым размером? Не выйдет. Нужно увеличивать размер массива на значение count1+1 - это если счётчик увеличиваете после записи в массив. Обычно счётчик увеличивают перед записью, затем увеличивают размер массива на размер счётчика, а далее уже по индексу [count1-1] записываете значения. И, как вам выше правильно заметили - нужно после проверки условий все остальные действия заключить в фигурные скобки.

Что ж вы так без элементарных знаний и представлений, пытаетесь что-то делать? Просто "на удачу"?

Давайте не будем кидаться гнилыми писюнами и тухлыми яйцами в чьи - то способности усваивать материал. Ваше предложение по решению моей задачи было через путь построения массива структур. Я открыл учебники и склепал как смог понять, а сам код кинул сюда на всеобщее обозрение чтоб оценили насколько все это правильно. Вы же не думаете что сделаю сразу идеальный вариант?
 
trader781:
Давайте не будем кидаться гнилыми писюнами и тухлыми яйцами в чьи - то способности усваивать материал. Ваше предложение по решению моей задачи было через путь построения массива структур. Я открыл учебники и склепал как смог понять, а сам код кинул сюда на всеобщее обозрение чтоб оценили насколько все это правильно. Вы же не думаете что сделаю сразу идеальный вариант?
Мне отстраниться от помощи после таких бурных фантазий. Последний раз прошу вас: на бумажке рапишите алгоритм, пройдитесь по нему с карандашом несколько раз. Записывайте значения и размер массива - что, и куда будет записано на каждой итерации цикла. А не ищите куски подходящего по вашему мнению кода.
Поймите, учить сложно, особенно, когда человек не сильно-то и хочет научиться.
 
Artyom Trishkin:
Мне отстраниться от помощи после таких бурных фантазий. Последний раз прошу вас: на бумажке рапишите алгоритм, пройдитесь по нему с карандашом несколько раз. Записывайте значения и размер массива - что, и куда будет записано на каждой итерации цикла. А не ищите куски подходящего по вашему мнению кода.
Поймите, учить сложно, особенно, когда человек не сильно-то и хочет научиться.

Артём, это понятно, но и меня тоже можно понять в данном случае. Ничего не работает и не будет в текущем варианте. Уже несколько страниц пишу про то что нужна сама команда вытаскивания нужного элемента данного массива и что я понятия не имею как она пишется именно для данного случая, например стоплосс для 5 ордера.

 по поводу карандаша и листика - бот готов уже месяц как и прекрасно сливает на любом инструменте, просто хочу модифицировать добавив ветку неравномерного усреднения.

 
trader781:

Артём, это понятно, но и меня тоже можно понять в данном случае. Ничего не работает и не будет в текущем варианте. Уже несколько страниц пишу про то что нужна сама команда вытаскивания нужного элемента данного массива и что я понятия не имею как она пишется именно для данного случая, например стоплосс для 5 ордера.

 по поводу карандаша и листика - бот готов уже месяц как и прекрасно сливает на любом инструменте, просто хочу модифицировать добавив ветку неравномерного усреднения.

Нет такой команды. Нужно делать свою собственную. Т.е. - функцию.
 
Artyom Trishkin:
Нет такой команды. Нужно делать свою собственную. Т.е. - функцию.

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

ArraySort

потом

ArrayBsearch по нужному номеру 

и дальше как с этим? 

именно переход от массива к элементру структуры
Причина обращения: