Ответить
25.09.2013, 13:11
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Мне вот интересно. Вам переоткрыли ордер. Цена открытия изменилась получается, и она стала равной текущей? А для баланса текущей ситуации по балансу, прибавили(отняли) профит(убыток) так?
У меня такого не было, так что, чтоб понять нада понять что у Вас там происходит.
Ну, надо разбираться с овернайтом - там мутное дело, вместо свопа в минусе в отдельной колонке делают закрытие, потом открытие по цене 00:00 и скомпенсацией какой-то
Короче, я не хочу в такой бурде ковыряться, но общий смысл у меня вышел такой:
Моя система работала чисто и аккуратно с прибылью в 1% в сутки, этот хитрожопый своп овернайт спиливал 1% в сутки за счет того, что не все сделки интрадей были. Там еще были другие условия не очень, но это не суть - мой трейлинг обломался на 6-знаке, ДЦ не принимал OrderOpenPrice() + i*Point, потому что открытие становилось 6-значным.

Алгоритм, конечно, дурацкий у меня был, но суть в том, что я неоткрывал ордел по 6-значной позиции в любом случае, и, значит, я не должен учитывать ихний какой-то там 6-знак.
Наверное, у всех ролловеров такое, но мне так не нравится:
Или принимайте свои же цифири, или выполняйте условия "пять знаков"
25.09.2013, 13:14
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Нет! Никак нет! Ни от какого железа ниче не зависит! Можно на ZX Spectrum реализовать астрономические расчеты - никаких проблем! И в шахматы может играть ваш телефон неглупо!
Все зависит от разработчиков софта!

Спорить не буду, т.к. не совсем в этом вопросе компетентен, чтоб утверждать, но я слышал, что всё-таки зависит.

Вопрос такой. Есть недокументированный тип ордера 6. Нужно ли его учитывать в функциях, кроме функции работающих с мани-менеджментом или вообще балансом? Да и вообще, интересно, что-нить про данный тип ордера.
Ведь он есть! А почему тогда не документирован?
25.09.2013, 13:22
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Вопрос такой. Есть недокументированный тип ордера 6. Нужно ли его учитывать в функциях, кроме функции работающих с мани-менеджментом или вообще балансом? Да и вообще, интересно, что-нить про данный тип ордера.
Ведь он есть! А почему тогда не документирован?
Под этим ордером обычно не торговые операции. Например пополнение, снятие денег со счёта, ролловеры на ПАММ счетах. Сворачивание старой истории сделок в результирующую строку... В общем что бы эти операции отображались в истории сделок они присудствуют как ордер 6 типа.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
ansol 
25.09.2013, 14:24
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Я тоже с такой фигней сталкивался.
В итоге пришел к тому что сделал отдельный файл с массивом строк и считывал оттуда.

А можно по подробнее? Я так понял, имелось в виду типа лист инструментов. Так это строка, а не массив строк. Для чего понадобился массив строк?
25.09.2013, 16:03
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
А можно по подробнее? Я так понял, имелось в виду типа лист инструментов. Так это строка, а не массив строк. Для чего понадобился массив строк?
Список инструментов, все верно. С ним удобно обращаться как с многомерным массивом, в котором хранится название каждого инструмента и его свойства. Только даже список имен не помещается в нормальное окошко параметров эксперта, о чем ansol сказал, да и быстро включать/отключать/менять отдельные пары неудобно. Итого решил держать его в отдельном файле, примерно так

EURUSD
//EURGBP // не используется
GBPUSD
AUDUSD
...
25.09.2013, 17:12
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Кусок нагло свистнут с гепард 2.5
Результ вот он:

Скрытый текст

PHP код:
extern string  Symbols1 "EURUSD: 0; NZDUSD: 0; EURCAD: 0; EURNZD: 0;";
extern string  Symbols2 "USDJPY: 0; USDCHF: 0; USDCAD: 0; EURAUD: 0;";
extern string  Symbols3 "EURJPY: 656630; AUDNZD: 0; CHFJPY: 0; CADCHF: 0;";
extern string  Symbols4 "GBPUSD: 0; GBPAUD: 0; AUDJPY: 0; CADJPY: 0;";
extern string  Symbols5 "GBPJPY: 0; GBPCHF: 0; NZDJPY: 0; GBPNZD: 0;";
extern string  Symbols6 "EURGBP: 0; EURCHF: 0; NZDCHF: 0; NZDCAD: 0;";
extern string  Symbols7 "AUDUSD: 0; AUDCHF: 0; AUDCAD: 0; GBPCAD: 0;";
extern string  Descr1   "Amp для тестера";
extern int     Amp      65;
extern string  Descr2   "Exp для тестера";
extern int     Exp      66;
extern string  Descr3   "ZigZag";
extern int     ZigZag   30;
extern string  Descr4   "Риск в %% от своб.средств";
extern double  Risk     5;
extern string  Descr5   "Magic Number";
extern int     MagicNumber 37025;
extern string  Descr6   "Макс.спред в пунктах";
extern double  MaxSpread 3//  стандартных пунктов
extern string  Descr7   "Номер счета для торговли, 0 - любой счет";
extern int     Account  0;
extern string  Descr8   "Мин. и макс. лот, 0 - без ограничений";
extern double  HighLot  0;
extern double  LowLot   0;
extern string  Descr9   "Использовать виртуальный стопаут";
extern bool    StopOut  true;
extern string  DescrA   "Порог для стоплосса в пунктах";
extern int     VirtStop 100;
//--- global variables ---
string         NameExpert "AnSol ZigZag";
string         sSymbol;
string         sComments;
string         sPair[], sPairID[];
//--- INT ---
int            ExtDeviation 5;
int            ExtBackStep 3;
int            Method 1;
int            ExtDepthiPipsiTFiPrevZticksRticksiPairIndex;
//--- DOUBLE ---
double dTFATRdAVZdPairID;
//--- BOOL ---
bool fOpenBuyfCloseBuyfOpenSellfCloseSell;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
Sleep(10000);
   
iPairIndex 0;
   if(
Account && Account != AccountNumber()) { Comment("Trade on account: "+AccountNumber()+" FORBIDDEN!\n"TimeToStr(TimeLocal(),TIME_MINUTES)); return(-1); }
   if(!
IsExpertEnabled()) { Comment("Experts is disabled!\n"TimeToStr(TimeLocal(),TIME_MINUTES)); return(-1); }
   if(
AccountBalance() == 0) { Comment("Zero balance!\n"TimeToStr(TimeLocal(),TIME_MINUTES)); return(-1); }
   
iTF Period();
// Этот кусок формирует массив доступных для торговли валютных пар   
   
string SymbolSuffix "";
   
int SymbolEnabledSeparator;
   if (
StringLen(Symbol()) > 6SymbolSuffix StringSubstr(Symbol(), 6StringLen(Symbol()) - 1);
   
string sPairTemp[], sTFConvSymbolRow;
      for (
int flag 1flag 8flag++) {
         switch (
flag) {
            case 
1:
               
SymbolRow Symbols1;
               break;
            case 
2:
               
SymbolRow Symbols2;
               break;
            case 
3:
               
SymbolRow Symbols3;
               break;
            case 
4:
               
SymbolRow Symbols4;
               break;
            case 
5:
               
SymbolRow Symbols5;
               break;
            case 
6:
               
SymbolRow Symbols6;
               break;
            case 
7:
               
SymbolRow Symbols7;
         }
         
Separator glSeparateStringInArray(SymbolRowsPairTemp";");
         for (
int isPair 0isPair SeparatorisPair++) {
            
SymbolEnabled StringFind(sPairTemp[isPair], ":");
            if (
SymbolEnabled != -1) {
               
sTFConv glStringTrimAll(StringSubstr(sPairTemp[isPair], SymbolEnabled 1));
               if (
StringLen(sTFConv) == 6)
                  {
                     
sSymbol glStringTrimAll(StringSubstr(sPairTemp[isPair], 0SymbolEnabled) + SymbolSuffix);
                     
iPairIndex++;
                     
ArrayResize(sPairiPairIndex);
                     
ArrayResize(sPairIDiPairIndex);
                     
sPairID[iPairIndex 1] = sTFConv;
                     
sPair[iPairIndex 1] = sSymbol;
                   }
               }
            }
         }
      if(!
iPairIndex) { Comment("Нет разрешенных пар для эксперта!"); return(-1); } 
[свернуть]

Типа, обсуждайте, я участвую

Последний раз редактировалось NSerega; 25.09.2013 в 18:28.
25.09.2013, 17:16
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Если суффикс приделывается после пары, то сова работает как надо. Например, символ имеет вид EURUSD.arm (армада маркет), то сова работает как часы
Просто в самой сове идет цикл по iPair и все в порядке.
Вообще, это излишество, но так хочется изобрести универсал
Не судите строго! Самому стыдно
25.09.2013, 22:35
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Кусок нагло свистнут с гепард 2.5
Типа, обсуждайте, я участвую
Я "ЗА". У меня как-раз со строками не всё гладко..
Вот кусок:

PHP код:
for (int flag 1flag 8flag++) {
         switch (
flag) { 

Это при загрузке эксперта руками нужно выбрать флаг? В глобальных то нет никакого упоминания про данную переменную. Откуда её значение сюда поступит?
Дальше вообще набор неизвестных функций. Обсуждать не понятно как.
26.09.2013, 06:25
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Зачем ей откуда-то поступать, если она объявлена в цикле?
Имеется 7 ( в данном случае) входных переменных, которые и перебираются по порядку.
Ёжики в данном случае Symbols1...Symbols7 имеют вид
26.09.2013, 08:26
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Зачем ей откуда-то поступать, если она объявлена в цикле?
Имеется 7 ( в данном случае) входных переменных, которые и перебираются по порядку.
Ёжики в данном случае Symbols1...Symbols7 имеют вид

Ну так при каждой итерации переменной flag будет присваиваться переменной SymbolRow новое значение. В итоге как ни крути последнее будет 7. Тогда зачем тут цикл? Выбора то нет фиксированного?
26.09.2013, 08:46
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Ну так при каждой итерации переменной flag будет присваиваться переменной SymbolRow новое значение. В итоге как ни крути последнее будет 7. Тогда зачем тут цикл? Выбора то нет фиксированного?
Гхм!
Не понял, вы против кого дружите?
Первый раз SymbolRow принимает значение Symbols1, второй раз Symbols2 и т.д. до Symbols7
итого имеем цикл с перебором 7 переменных.
Просто имя переменной = "Symbols" + i
А приходится извращаться с GOTO (CASE - это условное GOTO по сути)
26.09.2013, 09:18
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Ну так при каждой итерации переменной flag будет присваиваться переменной SymbolRow новое значение. В итоге как ни крути последнее будет 7. Тогда зачем тут цикл? Выбора то нет фиксированного?
Вот и мне кажется, что не цикл по flag тут нужен, а extern int flag и дальше switch(flag) с присваиванием нужного "ежика". А пока hoz увы прав, ничего кроме SymbolRow=Symbols7 в итоге не будет.

И еще, что Sleep(10000) тут делает?

Последний раз редактировалось qqmber; 26.09.2013 в 09:21.
26.09.2013, 09:31
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Гхм!
Не понял, вы против кого дружите?
Первый раз SymbolRow принимает значение Symbols1, второй раз Symbols2 и т.д. до Symbols7
итого имеем цикл с перебором 7 переменных.
Просто имя переменной = "Symbols" + i
А приходится извращаться с GOTO (CASE - это условное GOTO по сути)
Бред какой-то. Где видно, что имя переменной равно SymbolRow + i ?
Почему при каждой итерации будет прибавляться список1 к предыдущему списку?
Есть выбор и всё! Лично мне это вообще не логично...
26.09.2013, 09:38
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Вот и мне кажется, что не цикл по flag тут нужен, а extern int flag и дальше switch(flag) с присваиванием нужного "ежика". А пока hoz увы прав, ничего кроме SymbolRow=Symbols7 в итоге не будет.

И еще, что Sleep(10000) тут делает?
На Sleep предлагаю не обращать внимание. хотя, очевидно. что init() начинает выполняться через 10 секунд после запуска терминала
Что касается ваших рассуждений. то они неправильные. потому что работает так, как я описал, т.е. проверяются и обрабатываются все 7 переменных от Symbols1 до Symbols7
Ну же, напрягитесь - все логично же!

Идея изначально в том, что Symbols1 можно получить как "Symbols" + i при i=1
Неужели такой простой факт не виден невооруженным глазм?
Но средства MQL4 почему-то не позволяют выполнять такие операции с именами переменных. Кишка тонка?
26.09.2013, 09:40
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Бред какой-то. Где видно, что имя переменной равно SymbolRow + i ?
Почему при каждой итерации будет прибавляться список1 к предыдущему списку?
Есть выбор и всё! Лично мне это вообще не логично...
Никто никуда не будет прибавляться! Имя переменной меняется. В случае с CASE имена переменных могут быть любыми, а сделаны они нумерованными, потому что была надежда получать их с помощью переменной цикла - см. выше.
26.09.2013, 10:17
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Никто никуда не будет прибавляться! Имя переменной меняется. В случае с CASE имена переменных могут быть любыми, а сделаны они нумерованными, потому что была надежда получать их с помощью переменной цикла - см. выше.
" Была надежда "
26.09.2013, 10:32
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
На Sleep предлагаю не обращать внимание. хотя, очевидно. что init() начинает выполняться через 10 секунд после запуска терминала
Кто сказал?

Что касается ваших рассуждений. то они неправильные. потому что работает так, как я описал, т.е. проверяются и обрабатываются все 7 переменных от Symbols1 до Symbols7
Ну же, напрягитесь - все логично же!
Ну так.. А всё потому, что алгоритм изначально бредовый. Конструкция case придумана для реализации выборки вариантов, а не для "абы чего". а тут хз что им в голову пришло. Условия нет, а вариант есть.

Идея изначально в том, что Symbols1 можно получить как "Symbols" + i при i=1
Неужели такой простой факт не виден невооруженным глазм?
Неа.

Но средства MQL4 почему-то не позволяют выполнять такие операции с именами переменных. Кишка тонка?
У них - ДА!
26.09.2013, 10:38
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,044
Поблагодарили 878 раз(а) / Репутация: 864
Цитата:
Кто сказал?
Ну ладно-ладно, чё прикопался! Не init() начинает выполнятся через 10 сек., а то что написано в init() после sleep
Цитата:
Неа.
Чего опять? Ну семь ёжиков пронумеровано, перебираем их циклом от 1 до 7. Массив, очевидно, не нужен(на фига память временным массивом заполнять?), а нужно каждого ёжика всунуть во временную переменную для обработки.
Я всегда так делаю: взял да и прибавил к префиксу переменную цикла. А в MQL4 так нельзя
Кстати, и временная переменная тоже не нужна, если бы было можно имя переменной получать таким способом. Мне вообще исходные данные не нужны, я из них получаю то, что потом реально используется в программе, а extern сделан чисто для удобства пользователя.

Последний раз редактировалось ansol; 26.09.2013 в 10:41.
26.09.2013, 10:39
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
На Sleep предлагаю не обращать внимание. хотя, очевидно. что init() начинает выполняться через 10 секунд после запуска терминала
Что касается ваших рассуждений. то они неправильные. потому что работает так, как я описал, т.е. проверяются и обрабатываются все 7 переменных от Symbols1 до Symbols7
Ну же, напрягитесь - все логично же!

Идея изначально в том, что Symbols1 можно получить как "Symbols" + i при i=1
Неужели такой простой факт не виден невооруженным глазм?
Но средства MQL4 почему-то не позволяют выполнять такие операции с именами переменных. Кишка тонка?
Всё, понял. Действительно, с первого раза не въехал.
Ну нормальное решение, а что смущает. Все помещается в окошки и обрабатывается как надо. Штатного средства заведения массивов через extern все равно нет и динамически конструировать имена переменных тоже нельзя.
26.09.2013, 10:50
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Понял то я понял, но решение кривое. У меня нет слов...
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 22:30. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO