забыл еще присвоение перед return
AccBalance=AccountBalance() .
что в этой идее не верно
Спасибо за ответ.
Что-то вроде этого ?
int OrdersProfit()
{
int orders=OrdersHistoryTotal();
double LastOrder=0;
double PrelastOrder=0;
int TradeUP=0;
for (i=0;i<orders;i++)
{
OrderSelect(orders-1,SELECT_BY_POS,MODE_HISTORY);
LastOrder=OrderProfit();
OrderSelect(orders-2,SELECT_BY_POS,MODE_HISTORY);
PrelastOrder=OrderProfit();
if ((LastOrder+PrelastOrder)>=0) TradeUP=0;
else TradeUP++;
}
return(TradeUP);
}
забыл еще присвоение перед return
AccBalance=AccountBalance() .
что в этой идее не верно
У вас там опечатка, потому и косячит:
if(CalculateCurrentOrders(Symbol())==0) { if (AccBalance<=AccountBalance()) balance=true; if (AccBalance < AccountBalance()) balance=false; // здесь косяк }
Поменяйте знак "<" на ">" и идея заработает.
Но возможны и другие подходы, например смотреть прибыль на последних ордерах. Как лучше делать Вам решать.
Спасибо за ответ.
Что-то вроде этого ?
int OrdersProfit()
{
int orders=OrdersHistoryTotal();
double LastOrder=0;
double PrelastOrder=0;
int TradeUP=0;
for (i=0;i<orders;i++)
{
OrderSelect(orders-1,SELECT_BY_POS,MODE_HISTORY);
LastOrder=OrderProfit();
OrderSelect(orders-2,SELECT_BY_POS,MODE_HISTORY);
PrelastOrder=OrderProfit();
if ((LastOrder+PrelastOrder)>=0) TradeUP=0;
else TradeUP++;
}
return(TradeUP);
}
Ну в принципе думаю работать будет, НО... мне кажется вам нужна проверка на Symbol, на OrderType (отмененный отложенник может все спутать), на MagicNumber воспользуйтесь тем что другие уже сделали и отладили https://www.mql5.com/ru/forum/131859/page4#434231 на этой странице есть функция Кима isLossLastPos.
Да наверно просто вставил косо или когда правил код при написании сообщения опечатку допустил. В любом случае OrderSend error 4051; invalid lots amount for OrderSend function.
там далее просто эту функция используется для изменения лота (типа мартина) так что хз. С ордерами нужно попробовать по отдельности, хотя код из сообщения 3 моего тоже не работал. Я пробовал уже)
Вот так лучше будет
#define MAGIC 12345678 int start(){ int N=2; Print("Профит последних ",N," ордеров=",NOrdersProfit(N)); } double NOrdersProfit(int n=999999999){ // Возвращает суммарный профит n последних закрытых ордеров. int orders=OrdersHistoryTotal(); int LastClosedCounted=0; double LastNOrdersProfit=0; for (int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderMagicNumber()==MAGIC) { if(LastClosedCounted >= n) break; else {LastNOrdersProfit=+OrderProfit();LastClosedCounted++;} } } } if(LastClosedCounted<n) Print("В истории всего лишь ",LastClosedCounted," Ордеров c магиком ",MAGIC); return(LastNOrdersProfit); }
Так действительно будет лучше. Четко и красиво. Только вот это верно или опечатка?
else {LastNOrdersProfit=+OrderProfit();LastClosedCounted++;}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, уважаемые форумчане!
Собственно зарегался, чтобы задавать вопросы умным людям тут по mq4, так как практически только начал учить его.
Итак, проблема в следующем: необходимо через каждые 2 ордера сравнивать баланс счета до этих 2 ордеров и после них. А далее исходя из разницы корректировать торговлю.
Извиняйте, если колхоз получился далее. Но нижеследующее не работает.
bool TradeProfit()
{
double AccBalance=50000;
bool balance=false;
if(CalculateCurrentOrders(Symbol())==0)
{
if (AccBalance<=AccountBalance()) balance=true;
if (AccBalance<AccountBalance()) balance=false;
}
return(balance);
}