Скажите пожалуйста, чтоб в ММ отслеживался мейджик номер, я правитльно добавил в код "mn" или нет ?
//+----------------------------------------------------------------------------------------+//| ММ Функция работает по принципу наращивания лота при увеличении |//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается |//| на начальный лот в данном случае 0.1 если происходит профит то следующий |//| лот расчитывается по прогресии. |//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит |//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки |//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее |//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3, |//| далее если сделка будет прибыльной то следующий лот откроется из расчета |//| баланса депозита "баланс/500*0.1"=лот внешние переменные |//+----------------------------------------------------------------------------------------+double LotsOptimized() {
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot = Lots;
int orders = OrdersHistoryTotal();
int losses = 0;
lot = NormalizeDouble((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2);
if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print("Error in history!");
break;
}
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL || OrderMagicNumber()!=mn) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot;
return (lot);}
Подскажите как сделать: необходимо после закрытия конкретного ордера выставить новый на нужном уровне. Пробовал писать так, не открывает... Как правильно написать?
//-- Открытие ордеров после закрытияif (OrderSelect(Ticket_B,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B=0;}
if (OrderSelect(Ticket_B_1,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B_1=0;}
if (OrderSelect(Ticket_B_2,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B_2=0;}
...
if (Ticket_B==0) // в этом месте пробовал и (Ticket_B<1), тоже никак
{
SL=Bid - New_Stop(StopLoss)*Point;
TP=Ask + New_Stop(TakeProfit)*Point;
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket_B=OrderSend(Symbol(),OP_BUY,Lts,Ask,1,SL,TP,"121212",121212,0,CLR_NONE);
if (Ticket_B > 0)
{
Alert ("Открыт ордер Buy ",Ticket_B);
OrderSelect(Ticket_B,SELECT_BY_TICKET,MODE_TRADES);
one_price=OrderOpenPrice();
if (Fun_Error(GetLastError())==1)
continue;
return;
}
}
//-- Открытие ордеров -- BuyStopif (Up>=1 && Ticket_B_1<1)
{
SL_1=SL;
TP_1=one_price + StepUp*Point + New_Stop(TakeProfit)*Point;
Ticket_B_1=OrderSend(Symbol(), OP_BUYSTOP, Lts, one_price + StepUp*Point, 1, SL_1, TP_1,"121212",121212,0,CLR_NONE);
{
Alert("Торговый приказ B2 отправлен на сервер. Ожидание ответа..");
if (Ticket_B_1>0)
{
Alert ("Установлен ордер BuyStop ",Ticket_B_1);
}
}
}
Нужна помощь Проффесионалов( кто разбирается в этом деле..)
Чет не получается уменя осуществить идею.. вроде всё нащел, вставил в робота а он всё равно не так работает =(
посмотрите пожалуйсто, может там ошибка.
Хочу добится закрытия всех прибыльных позиций при достижении большего общего проффита чем общих убытков. пытаюсь сделать такое условие (Профит>Обытков) Закрывыть все прибыльные позиции
Помогите с кодом. Не получается условие (общий профит>Обший убыток) Закрыть все прибыльные сделки
нужно что бы он сам подсчитывал убыточные сделки от момента " максимального баланса " чтобы потом закрыть все прибыльные сделки как они достигнут профита больше чем весь убыток, и начать отсчёт убыточных сделок уже заного с новым депо
Может кто встречал советник, который следит за балансом депозита, например началась торговля с балансом 50.. начались убытки, советник должен запомнить на сколько баланс уменьшился для того что бы в дальнейшем при достежении профита открытых позиций Больше чем этот убыток он должен закрыть все прибыльные сделки, и начать отсчёт убытка заного
if (GetProfitOpenPosInCurrency()>NumberOfLossPosToday())
int slippage=1;
int ask, bid, open;
double point;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUY)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
bid=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point);
open=MathRound(OrderOpenPrice()/point);
if (bid-open<Profit) continue;
OrderClose(OrderTicket(),OrderLots(),bid*point,slippage);
}
if (OrderType()==OP_SELL)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
ask=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point);
open=MathRound(OrderOpenPrice()/point);
if (open-ask<Profit) continue;
OrderClose (OrderTicket(),OrderLots(),ask*point,slippage);
}
}
}
//--------------------------------------------------------------------double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
double p=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(p);
}
//--------------------------------------------------------------------int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
t=OrderCloseTime();
if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
if (OrderProfit()<0) kp++;
}
}
}
}
}
}
}
return(kp);
}
Скажите пожалуйста, чтоб в ММ отслеживался мейджик номер, я правитльно добавил в код "mn" или нет ?
Подскажите Временное "Условие" чтобы советник вклчался в определённое время, которое я могу выставить
Скажите пожалуйста, чтоб в ММ отслеживался мейджик номер, я правитльно добавил в код "mn" или нет ?
Если Magic объявлен глобальной переменной или константой:
int mn = ****;а так структурно без ошибок (небольшая правка синтаксиса):
А нормализацию лота нужно проводить на кратность MODE_LOTSTEP, иначе рано или поздно наткнётесь на ошибку 131 (ERR_INVALID_TRADE_VOLUME).
Ну, и не объявленные в функции переменные на Вашей совести... :)
Здравствуйте,
Нужна помощь Проффесионалов( кто разбирается в этом деле..)
Чет не получается уменя осуществить идею.. вроде всё нащел, вставил в робота а он всё равно не так работает =(
посмотрите пожалуйсто, может там ошибка.
Хочу добится закрытия всех прибыльных позиций при достижении большего общего проффита чем общих убытков. пытаюсь сделать такое условие (Профит>Обытков) Закрывыть все прибыльные позиции
Помогите с кодом. Не получается условие (общий профит>Обший убыток) Закрыть все прибыльные сделки
нужно что бы он сам подсчитывал убыточные сделки от момента " максимального баланса " чтобы потом закрыть все прибыльные сделки как они достигнут профита больше чем весь убыток, и начать отсчёт убыточных сделок уже заного с новым депо
Может кто встречал советник, который следит за балансом депозита, например началась торговля с балансом 50.. начались убытки, советник должен запомнить на сколько баланс уменьшился для того что бы в дальнейшем при достежении профита открытых позиций Больше чем этот убыток он должен закрыть все прибыльные сделки, и начать отсчёт убытка заного
А как узнать что последних 1-2-3 ордера были убыточные?
И вообще как узнать какой последний ордер был?
К примеру мне надо узнать сработал ли отложенный бай лимит и если сработал, то по какой цене и после этого выставить новый .
Как узнать что ордер сработал по трейлинг стопу и после сработки трейлинга выставить новые ордера?