А как посчитать сколько лотов в сумме окрыто по Buy или Sell.
Спасибо.
В целом подобные вычисления можно оформить в виде функции и вставить её в start() после функции Terminal().
Много чего не сходиться и пишет ошибку - чегото нет.
Тема очень интересная.
А не могли бы полностью составить программу.?
Много чего не сходиться и пишет ошибку - чегото нет.
Тема очень интересная.
Можно составить программу и полностью. Но в данном случае я не ставил перед собой такой цели.
И программы-то разные.. Я использую представленную здесь функцию в своих программах. Один из вариантов применения представлен здесь: Графический эксперт AutoGraf . Но это очень большая программа, вряд ли Вам нужно в ней разбираться.
Вы можете открыть на форуме MQL4 тему и выложить туда свой код. Посмотрим что не работает.
"но и показывает ущербность и ограниченность такой идеологии. "
сами Вы ущербные
научитесь в начале ручками "играть", а лишь потом пишите свои граали.
"Вот у меня не получается играть на форексе, а я возьму и напишу ТС каторая это будет делать за меня"
это же идиотизм, полный....!
Нет, вы не правы.
Во-первых, потому, что выбрали недостойный тон.
Во-вторых, попытка при отсутствии опыта работы на рынке написать что-то своими руками - один из лучших путей понять правила работы рынка, изучить инструменты технического анализа.
Написание программы, позволяет систематизировать, прежде всего в голове, последовательность действий, оценить их значимость и риск. Тестирование такого, как вы выразились, грааля, позволяет достаточно быстро освоится с характером выбранного валютного инструмента, ознакомиться с поведением рынка.
Думаю, вы лишены (по той или иной причине, например, косые руки или невосприимчивость к новому) возможности создать что-то сопоставимое с вашим огромным опытом трейдерской деятельности. Не волнуйтесь, это не ваша ущербность, просто это ваш путь. Но оставьте право выбора другим.
Опечатка вместо:
[][6] тип ордера 1=B,2=S,3=BL,4=SL,5=BS,6=SS
надо читать: [][6] тип ордера 0=B, 1=S, 2=BL, 3=SL, 4=BS, 5=SS
Проверяем так: Comment (OP_BUY," ",OP_SELL," ",OP_BUYLIMIT," ",OP_SELLLIMIT," ",OP_BUYSTOP," ",OP_SELLSTOP);
Либо в коде
Mas_Ord_Tek[ind][k][6] = OrderType(); Надо Mas_Ord_Tek[ind][k][6] = OrderType()+1;
Добрый день. Использовал ваш код в советнике но никак не могу реализовать запись массива на диск и его чтение. Может подскажите что делаю не так?
//+------------------------------------------------------------------+ int init() { FilesOpen(); // Читаем Файл в массив -->-Massiv return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int deinit() { FilesWrite(); // // Пишем массив Massiv --> в Файл return(0); } //+------------------------------------------------------------------+ //........ //+------------------------------------------------------------------+ void FilesOpen() // Читаем Файл в Massiv -->-- (резервное копирование) { int h=FileOpen("Massiv.bin",FILE_BIN|FILE_READ); if(h<1) { Print("Файл Massiv.bin не обнаружен, последняя ошибка ", GetLastError()); return(false); } int s=FileReadInteger(h,LONG_VALUE); ArrayResize(Massiv,s); FileReadArray(h,Massiv,0,s); FileClose(h); } //+------------------------------------------------------------------+ void FilesWrite() // Пишем Massiv --> в Файл (резервное копирование) { int h=FileOpen("Massiv.bin",FILE_BIN|FILE_WRITE); FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE); FileWriteArray(h,Massiv,0,ArraySize(Massiv)); FileClose(h); }
Представленный код слишком сложен и избыточен для построения большинства советников. Я уже не говорю по вынос функций в отдельные файлы - это неудобно с точки зрения распространения программ, но удобно при использовании общего участка кода в разных программах.
Лично я использую следующую конструкцию сразу после обнуления переменных при инициализации start():
//---- Пересчет и ведение открытых ордеров for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY && OrderSymbol()==_Symbol){//Есть открытый BUY if (условие закрытия ордера) { //если выполняется условие для закрытия, например, достигнут нужный уровень CloseOrder(OrderTicket()); //вызываем функцию закрытия oBuy--;} //раз ордер закрыт, то его из общего числа вычитаем oBuy++;} //суммируем ордера нужного типа if(OrderType()==OP_SELL && OrderSymbol()==_Symbol){ if (условие закрытия ордера) { CloseOrder(OrderTicket()); oSell--;} } oSell++;} }
При пересчете используется обратный порядок, что позволяет закрывать ордера прямо из цикла. Иначе при закрытии ордера следующий был бы пропущен, так как все номера сместились бы для замещения закрытого. Можно фильтровать по магическому номеру и смотреть ордера других типов. Можно прямо в цикле суммировать лоты, комиссии и пр.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
New article Учёт ордеров в большой программе has been published:
Author: Сергей Ковалев