Предлагаю обсудить такую тему: насколько актуальна торговля по нескольким Сиволам и/или ТаймФреймам в рамках одного эксперта?
сейчас сижу и думаю - выкладывать ли мне symbol_lib и шаблон эксперта, предназначенные именно для этого =) и думаю, что такой необходимости нет... если торговля будет по разным счетам - всё равно придёться запускать несколько терминалов, а если по одному - то просто несколько окон открыть. И путаницы меньше, вроде бы...
Интересно будет выслушать мнения и аргументы к ним ;)
Тема интересная, особенно если есть возможность торговать КРУГЛОСУТОЧНО, (выделенка или ADSL и "сервер"). Я не програмист, но реализовал торговлю по нескольким парам, саму тему, индикатор взял для чистоты эксперимента, понятно, чтоусловия торговли каждый выберет сам. Единственная загвоздка, эксперт должен проверять есть ли ордера и есть ли они по проверяемой паре, извини за каламбур, с этим я запарился. понял, что рукопашные ордера эксперт за свои не признает, нужно вставлять "магическое число" это так?
//----------------Есть ли ордера по паре vl-----------------------
int total=OrdersTotal(); int n=0; Print ("Всего ордеров==",total); if (total>0) {for (cnt=0;cnt>total;cnt++) {OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); {if(OrderSymbol()==vl) {n++; return(0); } } } } //Print("NNN==",n," ",vl); Print("ШАГ==",cnt," ","Symbol", vl," ","Orders==",n); //---------------------------------------------
Это кусок кода, который не работает, подскажи, с высот разума серьезно програмиста, в чем "косяк"
тут нет "серьёзных программистов" =) тут самоучки в основном ) да, надо при установке ордера присваивать ему MagicNumber, а потом после ордерселект проверять - if ( OrderMagicNumber() == _MagicNumber ) { тогда что-то делать с ордером. Надо, наверное, самому "дров наломать" чтоб понять, как работает ;)
Попытаюсь облегчить тебе жизнь - ф-ция _MagicNumber (ВНИМАТЕЛЬНО: если нужной пары нет в списке, мейджик будет генерироваться неоригинальный)
/////////////////////////////////////////////////////////////////////////////////
/**/ int _MagicNumber( int Expert_Id, string _Symbol, int _Period )
/////////////////////////////////////////////////////////////////////////////////
// Ф-ция генерирует MagicNumber, уникальный для связки Expert_Id - _Symbol - _Period.
// Expert_Id должен быть максимум четырёхзначный (т.е. <= 9999)
// Полученый MagicNumber будет 6-ти или 7-мизначный (в зависимости от Символа) и будет выглядеть так:
// SSPEEEE, где SS - это код символа (от 1 до 71), P - это код периода (от 1 до 8) и EEEE - Expert_Id (от 1 до 9999)
//
// Таким образом, даже с одинаковым Expert_Id эксперты, работающие на разных Символах/ТФ будут использовать разные MagicNumber.
// Например, при Expert_Id = 1230, _Symbol = GBPUSD и _Period = PERIOD_H1, MagicNumber будет 1141230
// А этот же эксперт, но на графике с периодом PERIOD_W1 будет иметь MagicNumber = 1181230
// Соответственно, если символ графика будет EURAUD, MagicNumber будет 141230
//
// т.е. Expert_Id есть смысл менять только если два эксперта работают на одном символе и одном ТФ
/////////////////////////////////////////////////////////////////////////////////
{
int Period_Id = 9;
switch ( _Period )
{
case PERIOD_MN1: Period_Id = 8; break;
case PERIOD_W1: Period_Id = 7; break;
case PERIOD_D1: Period_Id = 6; break;
case PERIOD_H4: Period_Id = 5; break;
case PERIOD_H1: Period_Id = 4; break;
case PERIOD_M15: Period_Id = 3; break;
case PERIOD_M5: Period_Id = 2; break;
case PERIOD_M1: Period_Id = 1; break;
default: Print( "trade_lib&info_lib - _MagicNumber( ", Expert_Id, ", ", _Symbol, ", ", _Period, " ) - Invalid Period! Function shall reurn 0!" ); return(0);
}
Period_Id *= 10000;
int Symbol_Id = 99;
// forex
if ( _Symbol == "AUDUSD" ) { Symbol_Id = 1; }
if ( _Symbol == "CHFJPY" ) { Symbol_Id = 2; }
if ( _Symbol == "EURAUD" ) { Symbol_Id = 3; }
if ( _Symbol == "EURCAD" ) { Symbol_Id = 4; }
if ( _Symbol == "EURCHF" ) { Symbol_Id = 5; }
if ( _Symbol == "EURGBP" ) { Symbol_Id = 8; }
if ( _Symbol == "EURJPY" ) { Symbol_Id = 7; }
if ( _Symbol == "EURUSD" ) { Symbol_Id = 6; }
if ( _Symbol == "GBPCHF" ) { Symbol_Id = 9; }
if ( _Symbol == "GBPJPY" ) { Symbol_Id = 10; }
if ( _Symbol == "GBPUSD" ) { Symbol_Id = 11; }
if ( _Symbol == "USDCAD" ) { Symbol_Id = 12; }
if ( _Symbol == "USDCHF" ) { Symbol_Id = 13; }
if ( _Symbol == "USDJPY" ) { Symbol_Id = 14; }
// stock
if ( _Symbol == "GOLD" ) { Symbol_Id = 15; }
//cfd
if ( _Symbol == "#AA" ) { Symbol_Id = 16; }
if ( _Symbol == "#AIG" ) { Symbol_Id = 17; }
if ( _Symbol == "#AXP" ) { Symbol_Id = 18; }
if ( _Symbol == "#BA" ) { Symbol_Id = 19; }
if ( _Symbol == "#C" ) { Symbol_Id = 20; }
if ( _Symbol == "#CAT" ) { Symbol_Id = 21; }
if ( _Symbol == "#DD" ) { Symbol_Id = 22; }
if ( _Symbol == "#DIA" ) { Symbol_Id = 23; }
if ( _Symbol == "#DIS" ) { Symbol_Id = 24; }
if ( _Symbol == "#EK" ) { Symbol_Id = 25; }
if ( _Symbol == "#GE" ) { Symbol_Id = 26; }
if ( _Symbol == "#GM" ) { Symbol_Id = 27; }
if ( _Symbol == "#HD" ) { Symbol_Id = 28; }
if ( _Symbol == "#HON" ) { Symbol_Id = 29; }
if ( _Symbol == "#HPQ" ) { Symbol_Id = 30; }
if ( _Symbol == "#IBM" ) { Symbol_Id = 31; }
if ( _Symbol == "#INTC" ) { Symbol_Id = 32; }
if ( _Symbol == "#IP" ) { Symbol_Id = 33; }
if ( _Symbol == "#JNJ" ) { Symbol_Id = 34; }
if ( _Symbol == "#JPM" ) { Symbol_Id = 35; }
if ( _Symbol == "#KO" ) { Symbol_Id = 36; }
if ( _Symbol == "#MCD" ) { Symbol_Id = 37; }
if ( _Symbol == "#MMM" ) { Symbol_Id = 38; }
if ( _Symbol == "#MO" ) { Symbol_Id = 39; }
if ( _Symbol == "#MRK" ) { Symbol_Id = 40; }
if ( _Symbol == "#MSFT" ) { Symbol_Id = 41; }
if ( _Symbol == "#PFE" ) { Symbol_Id = 42; }
if ( _Symbol == "#PG" ) { Symbol_Id = 43; }
if ( _Symbol == "#QQQ" ) { Symbol_Id = 44; }
if ( _Symbol == "#SBC" ) { Symbol_Id = 45; }
if ( _Symbol == "#SPY" ) { Symbol_Id = 46; }
if ( _Symbol == "#T" ) { Symbol_Id = 47; }
if ( _Symbol == "#UTX" ) { Symbol_Id = 48; }
if ( _Symbol == "#VZ" ) { Symbol_Id = 49; }
if ( _Symbol == "#WMT" ) { Symbol_Id = 50; }
if ( _Symbol == "#XOM" ) { Symbol_Id = 51; }
//futures
if ( _Symbol == "#CH5" ) { Symbol_Id = 52; }
if ( _Symbol == "#CK5" ) { Symbol_Id = 53; }
if ( _Symbol == "#CLG5" ) { Symbol_Id = 54; }
if ( _Symbol == "#CLH5" ) { Symbol_Id = 55; }
if ( _Symbol == "#CLJ5" ) { Symbol_Id = 56; }
if ( _Symbol == "#ENQH5" ) { Symbol_Id = 57; }
if ( _Symbol == "#EPH5" ) { Symbol_Id = 58; }
if ( _Symbol == "#GOLDG5") { Symbol_Id = 59; }
if ( _Symbol == "#GOLDJ5") { Symbol_Id = 60; }
if ( _Symbol == "#NGH5" ) { Symbol_Id = 61; }
if ( _Symbol == "#NGJ5" ) { Symbol_Id = 62; }
if ( _Symbol == "#SH5" ) { Symbol_Id = 63; }
if ( _Symbol == "#SK5" ) { Symbol_Id = 64; }
if ( _Symbol == "#SLVH" ) { Symbol_Id = 65; }
if ( _Symbol == "#WH5" ) { Symbol_Id = 66; }
if ( _Symbol == "#WK5" ) { Symbol_Id = 67; }
//index
if ( _Symbol == "_DJI" ) { Symbol_Id = 68; }
if ( _Symbol == "_NQ100" ) { Symbol_Id = 69; }
if ( _Symbol == "_NQCOMP") { Symbol_Id = 70; }
if ( _Symbol == "_SP500" ) { Symbol_Id = 71; }
if ( Symbol_Id == 99 ) { Print( "trade_lib&info_lib - _MagicNumber( ", Expert_Id, ", ", _Symbol, ", ", _Period, " ) - Invalid Symbol! Function shall reurn 0!" ); return(0); }
Symbol_Id *= 100000;
return(Expert_Id + Period_Id + Symbol_Id);
}
[quote]тут нет "серьёзных программистов" =) тут самоучки в основном ) [qoute] Понял, спасибо за MN, огромное отдельное спасибо за библиотеку, буду пробовать
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
серьезно, для новичков на рынке это то - что надо !, аккуратно, информативно, теперь дело за серьезными наворотами.
предложения по доработке принимаются вне очереди =)
насколько актуальна торговля по нескольким Сиволам и/или ТаймФреймам в рамках одного эксперта?
сейчас сижу и думаю - выкладывать ли мне symbol_lib и шаблон эксперта, предназначенные именно для этого =)
и думаю, что такой необходимости нет... если торговля будет по разным счетам - всё равно придёться запускать несколько терминалов, а если по одному - то просто несколько окон открыть. И путаницы меньше, вроде бы...
Интересно будет выслушать мнения и аргументы к ним ;)
Тема интересная, особенно если есть возможность торговать КРУГЛОСУТОЧНО, (выделенка или ADSL и "сервер").
Я не програмист, но реализовал торговлю по нескольким парам, саму тему, индикатор взял для чистоты эксперимента, понятно, чтоусловия торговли каждый выберет сам. Единственная загвоздка, эксперт должен проверять есть ли ордера и есть ли они по проверяемой паре, извини за каламбур, с этим я запарился. понял, что рукопашные ордера эксперт за свои не признает, нужно вставлять "магическое число" это так?
//----------------Есть ли ордера по паре vl-----------------------
int total=OrdersTotal();
int n=0;
Print ("Всего ордеров==",total);
if (total>0)
{for (cnt=0;cnt>total;cnt++)
{OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
{if(OrderSymbol()==vl)
{n++; return(0);
}
}
}
}
//Print("NNN==",n," ",vl);
Print("ШАГ==",cnt," ","Symbol", vl," ","Orders==",n);
//---------------------------------------------
Это кусок кода, который не работает, подскажи, с высот разума серьезно програмиста, в чем "косяк"
да, надо при установке ордера присваивать ему MagicNumber, а потом после ордерселект проверять - if ( OrderMagicNumber() == _MagicNumber ) { тогда что-то делать с ордером.
Надо, наверное, самому "дров наломать" чтоб понять, как работает ;)
Попытаюсь облегчить тебе жизнь - ф-ция _MagicNumber (ВНИМАТЕЛЬНО: если нужной пары нет в списке, мейджик будет генерироваться неоригинальный)
///////////////////////////////////////////////////////////////////////////////// /**/ int _MagicNumber( int Expert_Id, string _Symbol, int _Period ) ///////////////////////////////////////////////////////////////////////////////// // Ф-ция генерирует MagicNumber, уникальный для связки Expert_Id - _Symbol - _Period. // Expert_Id должен быть максимум четырёхзначный (т.е. <= 9999) // Полученый MagicNumber будет 6-ти или 7-мизначный (в зависимости от Символа) и будет выглядеть так: // SSPEEEE, где SS - это код символа (от 1 до 71), P - это код периода (от 1 до 8) и EEEE - Expert_Id (от 1 до 9999) // // Таким образом, даже с одинаковым Expert_Id эксперты, работающие на разных Символах/ТФ будут использовать разные MagicNumber. // Например, при Expert_Id = 1230, _Symbol = GBPUSD и _Period = PERIOD_H1, MagicNumber будет 1141230 // А этот же эксперт, но на графике с периодом PERIOD_W1 будет иметь MagicNumber = 1181230 // Соответственно, если символ графика будет EURAUD, MagicNumber будет 141230 // // т.е. Expert_Id есть смысл менять только если два эксперта работают на одном символе и одном ТФ ///////////////////////////////////////////////////////////////////////////////// { int Period_Id = 9; switch ( _Period ) { case PERIOD_MN1: Period_Id = 8; break; case PERIOD_W1: Period_Id = 7; break; case PERIOD_D1: Period_Id = 6; break; case PERIOD_H4: Period_Id = 5; break; case PERIOD_H1: Period_Id = 4; break; case PERIOD_M15: Period_Id = 3; break; case PERIOD_M5: Period_Id = 2; break; case PERIOD_M1: Period_Id = 1; break; default: Print( "trade_lib&info_lib - _MagicNumber( ", Expert_Id, ", ", _Symbol, ", ", _Period, " ) - Invalid Period! Function shall reurn 0!" ); return(0); } Period_Id *= 10000; int Symbol_Id = 99; // forex if ( _Symbol == "AUDUSD" ) { Symbol_Id = 1; } if ( _Symbol == "CHFJPY" ) { Symbol_Id = 2; } if ( _Symbol == "EURAUD" ) { Symbol_Id = 3; } if ( _Symbol == "EURCAD" ) { Symbol_Id = 4; } if ( _Symbol == "EURCHF" ) { Symbol_Id = 5; } if ( _Symbol == "EURGBP" ) { Symbol_Id = 8; } if ( _Symbol == "EURJPY" ) { Symbol_Id = 7; } if ( _Symbol == "EURUSD" ) { Symbol_Id = 6; } if ( _Symbol == "GBPCHF" ) { Symbol_Id = 9; } if ( _Symbol == "GBPJPY" ) { Symbol_Id = 10; } if ( _Symbol == "GBPUSD" ) { Symbol_Id = 11; } if ( _Symbol == "USDCAD" ) { Symbol_Id = 12; } if ( _Symbol == "USDCHF" ) { Symbol_Id = 13; } if ( _Symbol == "USDJPY" ) { Symbol_Id = 14; } // stock if ( _Symbol == "GOLD" ) { Symbol_Id = 15; } //cfd if ( _Symbol == "#AA" ) { Symbol_Id = 16; } if ( _Symbol == "#AIG" ) { Symbol_Id = 17; } if ( _Symbol == "#AXP" ) { Symbol_Id = 18; } if ( _Symbol == "#BA" ) { Symbol_Id = 19; } if ( _Symbol == "#C" ) { Symbol_Id = 20; } if ( _Symbol == "#CAT" ) { Symbol_Id = 21; } if ( _Symbol == "#DD" ) { Symbol_Id = 22; } if ( _Symbol == "#DIA" ) { Symbol_Id = 23; } if ( _Symbol == "#DIS" ) { Symbol_Id = 24; } if ( _Symbol == "#EK" ) { Symbol_Id = 25; } if ( _Symbol == "#GE" ) { Symbol_Id = 26; } if ( _Symbol == "#GM" ) { Symbol_Id = 27; } if ( _Symbol == "#HD" ) { Symbol_Id = 28; } if ( _Symbol == "#HON" ) { Symbol_Id = 29; } if ( _Symbol == "#HPQ" ) { Symbol_Id = 30; } if ( _Symbol == "#IBM" ) { Symbol_Id = 31; } if ( _Symbol == "#INTC" ) { Symbol_Id = 32; } if ( _Symbol == "#IP" ) { Symbol_Id = 33; } if ( _Symbol == "#JNJ" ) { Symbol_Id = 34; } if ( _Symbol == "#JPM" ) { Symbol_Id = 35; } if ( _Symbol == "#KO" ) { Symbol_Id = 36; } if ( _Symbol == "#MCD" ) { Symbol_Id = 37; } if ( _Symbol == "#MMM" ) { Symbol_Id = 38; } if ( _Symbol == "#MO" ) { Symbol_Id = 39; } if ( _Symbol == "#MRK" ) { Symbol_Id = 40; } if ( _Symbol == "#MSFT" ) { Symbol_Id = 41; } if ( _Symbol == "#PFE" ) { Symbol_Id = 42; } if ( _Symbol == "#PG" ) { Symbol_Id = 43; } if ( _Symbol == "#QQQ" ) { Symbol_Id = 44; } if ( _Symbol == "#SBC" ) { Symbol_Id = 45; } if ( _Symbol == "#SPY" ) { Symbol_Id = 46; } if ( _Symbol == "#T" ) { Symbol_Id = 47; } if ( _Symbol == "#UTX" ) { Symbol_Id = 48; } if ( _Symbol == "#VZ" ) { Symbol_Id = 49; } if ( _Symbol == "#WMT" ) { Symbol_Id = 50; } if ( _Symbol == "#XOM" ) { Symbol_Id = 51; } //futures if ( _Symbol == "#CH5" ) { Symbol_Id = 52; } if ( _Symbol == "#CK5" ) { Symbol_Id = 53; } if ( _Symbol == "#CLG5" ) { Symbol_Id = 54; } if ( _Symbol == "#CLH5" ) { Symbol_Id = 55; } if ( _Symbol == "#CLJ5" ) { Symbol_Id = 56; } if ( _Symbol == "#ENQH5" ) { Symbol_Id = 57; } if ( _Symbol == "#EPH5" ) { Symbol_Id = 58; } if ( _Symbol == "#GOLDG5") { Symbol_Id = 59; } if ( _Symbol == "#GOLDJ5") { Symbol_Id = 60; } if ( _Symbol == "#NGH5" ) { Symbol_Id = 61; } if ( _Symbol == "#NGJ5" ) { Symbol_Id = 62; } if ( _Symbol == "#SH5" ) { Symbol_Id = 63; } if ( _Symbol == "#SK5" ) { Symbol_Id = 64; } if ( _Symbol == "#SLVH" ) { Symbol_Id = 65; } if ( _Symbol == "#WH5" ) { Symbol_Id = 66; } if ( _Symbol == "#WK5" ) { Symbol_Id = 67; } //index if ( _Symbol == "_DJI" ) { Symbol_Id = 68; } if ( _Symbol == "_NQ100" ) { Symbol_Id = 69; } if ( _Symbol == "_NQCOMP") { Symbol_Id = 70; } if ( _Symbol == "_SP500" ) { Symbol_Id = 71; } if ( Symbol_Id == 99 ) { Print( "trade_lib&info_lib - _MagicNumber( ", Expert_Id, ", ", _Symbol, ", ", _Period, " ) - Invalid Symbol! Function shall reurn 0!" ); return(0); } Symbol_Id *= 100000; return(Expert_Id + Period_Id + Symbol_Id); }[qoute]
Понял, спасибо за MN, огромное отдельное спасибо за библиотеку, буду пробовать