Здравствуйте господа профессионалы.Не откажите новичку в программировании, посмотрите код,на правильность написания. Кому не лень разбираться с ним. Это мой первый опыт написания большого кода.На тестере не могу его проверить так как он является мультивалютным .Но торговая система этого стоит. Файл с кодом и индикаторы прилагаю в архиве.
Прикинул для Вас единую функцию для создания связанных массивов символов и количества ордеров (открытых позиций) на покупку и продажу, протестируйте скриптом открыв на демке несколько позиций
string Smbl[];
int CntBuy[],CntSell[];
voidOnStart()
{
if(CountBuySell(Smbl, CntSell, CntBuy))
for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
}
//-------------------bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
int ot,n,N=0,f=0,cb=0,cs=0;
string symbol;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ot=OrderType()+1; if(ot>2) continue; // пропускаем лимит ордера
symbol=""; symbol=OrderSymbol(); if (symbol=="") continue; // убедились что символ выбран
f=0; cb=0; cs=0; // обнулили счетчики и флаг символа
for (n=0; n<N; n++) if (symbol==symb[n]) f=1; // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
if (f==0) // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
{
N++;
ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
}
if(ot==1) cb++; // OP_BUY для выбранного символа
else cs++; // OP_SELL
// перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
// такоим образом для каждого индекса всех 3 массивов будет соответствовать конкретный символ и количество позиций покупки и продажи для него
for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs; }
}
}
if(N>0) return(1); // есть открытые позицииreturn(0); // позиций нет
}
Пытаюсь написать простой советник, закрывающий все позиции на счёте при достижении заданных значений прибыли или убытка в валюте депозита (открываюсь по нескольким символам), только он закрывает позиции сразу же при их появлении (((
GSB: Прикинул для Вас единую функцию для создания связанных массивов символов и количества ордеров (открытых позиций) на покупку и продажу, протестируйте скриптом открыв на демке несколько позиций
Спасибо конечно за выделенное время для меня,но для меня пока это сложновато, простите за назойливость. Поясните мне что, где,как ? Как говорится на пальцах.
По поводу системы,протестировал ее,поторговал ей на демке-счете в ручную,дает не плохие результаты.Вот и хочу ее автоматизировать.
Спасибо конечно за выделенное время для меня,но для меня пока это сложновато, простите за назойливость. Поясните мне что, где,как ? Как говорится на пальцах.
По поводу системы,протестировал ее,поторговал ей на демке-счете в ручную,дает не плохие результаты.Вот и хочу ее автоматизировать.
Как же Вы ее тестировали на демке если там одни ошибки? Код который представлен не мог торговать. Комменты к коду дописал. Все - дальше трудитесь сами, без знаний и упорного труда... на биржевых площадках и особенно на форексе торговать нельзя. Результат будет однозначный. Настоятельно рекомендую учиться и торговать на демо счете причем строго по выбранной системе ни на шаг не отступая. 2-3 месяца покажут результат, дальше будете решать пригодна ли данная система для вас конкретно и торговли в принципе.
Вопрос к модераторам или администраторам: можно ли изменить свой ник? Попытался зарегистрироваться на MQL5, но оказалось, что этот ник там уже занят, пришлось зарегистрироваться под другим именем. А хотелось бы, чтобы ники там и здесь были одинаковыми. Могу, конечно, и здесь просто зарегистрироваться заново, но уже начал кое-что выкладывать в Code Base и хотелось бы сохранить авторство своих работ (да и постов), просто "переименовавшись". Это возможно?
Spy: Вопрос к модераторам или администраторам: можно ли изменить свой ник? Попытался зарегистрироваться на MQL5, но оказалось, что этот ник там уже занят, пришлось зарегистрироваться под другим именем. А хотелось бы, чтобы ники там и здесь были одинаковыми. Могу, конечно, и здесь просто зарегистрироваться заново, но уже начал кое-что выкладывать в Code Base и хотелось бы сохранить авторство своих работ (да и постов), просто "переименовавшись". Это возможно?
Напишите Рошу в личку. Надеюсь ее найдете. Изложите проблему
Здравствуйте! Имея советники на предыдущей версии МетаТрейдара я обновил терминал. После вернулся обратно к 509. Так что советники "побывав" в 60... билде, вернулись в версию терминала, на котором были написаны.
Вопрос такой: что делать с теми экспертами, которые перестали открывать сделки на тестере после "возвращения" и с теми, которые проверить больше не получается (кнопка start в тестере просто не отвечает на клик)?
Здравствуйте господа профессионалы.Не откажите новичку в программировании, посмотрите код,на правильность написания. Кому не лень разбираться с ним. Это мой первый опыт написания большого кода.На тестере не могу его проверить так как он является мультивалютным .Но торговая система этого стоит. Файл с кодом и индикаторы прилагаю в архиве.
Пытаюсь написать простой советник, закрывающий все позиции на счёте при достижении заданных значений прибыли или убытка в валюте депозита (открываюсь по нескольким символам), только он закрывает позиции сразу же при их появлении (((
Никак не пойму, что не так:
Зацени.
extern int profit = 30;
extern int Magic=0;
int CurProfit;
extern bool CurSymbolOnly = false;
int start() // Спец. функция start
{
//счетчик профита всех ордеров
double p1;
int i1, kk1=OrdersTotal(), pr1=0;
for (i1=0; i1<kk1; i1++)
{
if (OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))
{
if (!CurSymbolOnly || OrderSymbol()==Symbol())
{
p1=MarketInfo(OrderSymbol(), MODE_POINT);
if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0.0001; else p1=0.01;
if (OrderType()==OP_BUY)
{
pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);
}
if (OrderType()==OP_SELL)
{
pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);
}
}
}
}
CurProfit=pr1;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (profit<=pr1)
{
ClosePosWithMaxProfitInCurrency();
}
return(0);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///закрывает начиная с самого дорогого к самому дешовому
void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)
{
double pr=0;
int i5, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i5=k-1; i5>=0; i5--)
{
if (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))
{
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if (mn<0 || OrderMagicNumber()==mn)
{
if (pr<OrderProfit()+OrderSwap())
{
pr=OrderProfit()+OrderSwap();
np=i5;
}
}
}
}
}
if (np>=0)
{
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))
{
{for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);
if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);
}
}
}
}
closeotlojnie();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//закрыть отложные
void closeotlojnie()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());
}
}
Прикинул для Вас единую функцию для создания связанных массивов символов и количества ордеров (открытых позиций) на покупку и продажу, протестируйте скриптом открыв на демке несколько позиций
Спасибо конечно за выделенное время для меня,но для меня пока это сложновато, простите за назойливость. Поясните мне что, где,как ? Как говорится на пальцах.
По поводу системы,протестировал ее,поторговал ей на демке-счете в ручную,дает не плохие результаты.Вот и хочу ее автоматизировать.
Спасибо конечно за выделенное время для меня,но для меня пока это сложновато, простите за назойливость. Поясните мне что, где,как ? Как говорится на пальцах.
По поводу системы,протестировал ее,поторговал ей на демке-счете в ручную,дает не плохие результаты.Вот и хочу ее автоматизировать.
Как же Вы ее тестировали на демке если там одни ошибки? Код который представлен не мог торговать. Комменты к коду дописал. Все - дальше трудитесь сами, без знаний и упорного труда... на биржевых площадках и особенно на форексе торговать нельзя. Результат будет однозначный. Настоятельно рекомендую учиться и торговать на демо счете причем строго по выбранной системе ни на шаг не отступая. 2-3 месяца покажут результат, дальше будете решать пригодна ли данная система для вас конкретно и торговли в принципе.
Вопрос к модераторам или администраторам: можно ли изменить свой ник? Попытался зарегистрироваться на MQL5, но оказалось, что этот ник там уже занят, пришлось зарегистрироваться под другим именем. А хотелось бы, чтобы ники там и здесь были одинаковыми. Могу, конечно, и здесь просто зарегистрироваться заново, но уже начал кое-что выкладывать в Code Base и хотелось бы сохранить авторство своих работ (да и постов), просто "переименовавшись". Это возможно?
Напишите Рошу в личку. Надеюсь ее найдете. Изложите проблему
ОК, спасибо.
Здравствуйте! Имея советники на предыдущей версии МетаТрейдара я обновил терминал. После вернулся обратно к 509. Так что советники "побывав" в 60... билде, вернулись в версию терминала, на котором были написаны.
Вопрос такой: что делать с теми экспертами, которые перестали открывать сделки на тестере после "возвращения" и с теми, которые проверить больше не получается (кнопка start в тестере просто не отвечает на клик)?