[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 751

 
ToLik_SRGV:

Косяк очевиден, естественно он на каждом тике открывает позиции, так как убыточный ордер в истории никуда не девается, вот он и находит его на каждом тике, и заполняет значения контрольных переменных теме же значениями, ну а далее срабатывает блок открытия сделок.


а как его зделать шоб он повторо его е искал вернее не искал то что уже было отработано

 
FoxUA:

а как его зделать шоб он повторо его е искал вернее не искал то что уже было отработано

Выкиньте вот этот блок:  

for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
 OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; 
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
            
            
         }
      }

И вместо него вставьте этот:

   for(int cnt=OrdersHistoryTotal();cnt>0;cnt--){
      static int num_ticket;
      if(!OrderSelect(cnt-1, SELECT_BY_POS, MODE_HISTORY))break;
      if(OrderMagicNumber()== mag && OrderSymbol()==Symbol()){      
      if(num_ticket != OrderTicket())num_ticket = OrderTicket(); else break;
         if(OrderType() == OP_BUY){
            b=1;
            if(OrderClosePrice()==OrderTakeProfit())bt=1;
            if(OrderClosePrice()==OrderStopLoss())bs=1;
            bl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
         if(OrderType() == OP_SELL){
            s=1;
            if(OrderClosePrice()==OrderTakeProfit())st=1; 
            if(OrderClosePrice()==OrderStopLoss())ss=1;
            sl=OrderLots()*100;
            num_ticket = OrderTicket();
            break;
         }
      }
   }

 Отличается тем, что помимо прочего запоминает номер тикета последней убыточной сделки, соответственно, проверяет его, и не допускает открытия по одному и тому же сигналу.

 
ToLik_SRGV:

Выкиньте вот этот блок:


спосибо огромное на тесте все вроде работает

 
Abzasc:

Как то так, наверно.

ЗЫ Кнопкой вставки кода "SRC"  пользуйтесь, читать неудобно.

 


Спасибо огромное ! я вместо буул писал инт для UseHourTrade2 ))
 

Друзья, добрый день.

Хотел с вами посоветоваться по такому вопросу:

сейчас работаю над индикатором, который в окно первой валютной пары переносит показания(ЗигЗаг), сформированные на второй валютной паре.

но, столкнулся с проблемой:

например, если есть большой "разрыв" в котировках: одна пара котируется, как 1.4237, а другая, как 0.8345, то эти индикаторы оказываются "разбросаны" по экрану, что не очень удобно визуально...

как бы осуществить преобразование "координат" индикатора со второй пары с учетом котировок первой (как сделать цену "относительной")?

Заранее большое спасибо за совет, рекомендацию.

 
Morzh09:

Друзья, добрый день.

Хотел с вами посоветоваться по такому вопросу:

сейчас работаю над индикатором, который в окно первой валютной пары переносит показания(ЗигЗаг), сформированные на второй валютной паре.

но, столкнулся с проблемой:

например, если есть большой "разрыв" в котировках: одна пара котируется, как 1.4237, а другая, как 0.8345, то эти индикаторы оказываются "разбросаны" по экрану, что не очень удобно визуально...

как бы осуществить преобразование "координат" индикатора со второй пары с учетом котировок первой (как сделать цену "относительной")?

Заранее большое спасибо за совет, рекомендацию.

Посмотри ссылку. Там оригинально сделано само масштабирование.

https://www.mql5.com/ru/code/7933

 

Здравствуйте!

Подскажите пожалуйста как можно это упростить -

if (Balance > 600)

{

Lot_mod = 0.1;

}

if (Balance > 700)

{

Lot_mod = 0.11;

}

if (Balance > 800)

{

Lot_mod = 0.12;

}

if (Balance > 900)

{

Lot_mod = 0.13;

}

И так далее.... А то в таком виде слишком размашисто получается.

Спасибо!

 
Lim1:

Здравствуйте!

Подскажите пожалуйста как можно это упростить -

И так далее.... А то в таком виде слишком размашисто получается.

Спасибо!





Уравнение вида y=a*x+b поможет
 
Lim1:

Здравствуйте!

Подскажите пожалуйста как можно это упростить -





формулу для расчета лота определи и все, а иначе париться придется
 

Lim1, попробуй вот так:

int BalanceExcessIn100s = MathFloor( ( Balance - 600 ) / 100.01 );
Lot_mod = BalanceExcessIn100s * 0.01 + 0.1;
Причина обращения: