Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 538
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте господа профессионалы.Не откажите новичку в программировании, посмотрите код,на правильность написания. Кому не лень разбираться с ним. Это мой первый опыт написания большого кода.На тестере не могу его проверить так как он является мультивалютным .Но торговая система этого стоит. Файл с кодом и индикаторы прилагаю в архиве.
Пытаюсь написать простой советник, закрывающий все позиции на счёте при достижении заданных значений прибыли или убытка в валюте депозита (открываюсь по нескольким символам), только он закрывает позиции сразу же при их появлении (((
Никак не пойму, что не так:
Зацени.
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 в тестере просто не отвечает на клик)?