[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 458

 
mamba5:

в ходе тестирования советника выдается ошибка 130- неверные стопы. В функцию NewOrder должны передаваться внешние переменные TakeProfit и StopLoss и как мне кажется я все для этого предпринял, но как показывает print- передаются нули. Как я нонимаю причина ошибки кроется сдесь, но как ее устранить поять пока не смог. Прошу вашей помощи.

extern int TakeProfit=100;
extern int StopLoss=100;

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

Тут проблема то что есть глобальные переменные StopLoss и до кучи они еще передаются в процедуру параметрами. Лучше переименовать их в процедуре.

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

Zhunko:

Трендовыми линиями.

А подробнее? Хоть ссылку дайте, где почитать?
 
splxgf:

Тут проблема то что есть глобальные переменные StopLoss и до кучи они еще передаются в процедуру параметрами. Лучше переименовать их в процедуре.


Вы правы. Так действительно логичнее. Исправил:

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
Но это особо не помогло. TaPr и StLo= 100, а PR, SL и TP почему то равны нулю.....
Файлы:
 

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

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

Вверху перед этим посчитаны цена открытия SL и TP потом идет открытие ордера только надо как то сделать чтоб он смотрел если ордер уже установлен второй такой же чтобы не ставил OrderComment может как то пока не могу сообразить как это сделать

Заранее благодарен

 
fore-x:
А подробнее? Хоть ссылку дайте, где почитать?
Какую ссылку? Трендовыми линиями бары соединяете. Вот и будете независимы от буферов с их глюками.
 
artmedia70:
Пока вы его сами на график не повесите, он не будет отражаться во время работы эксперта. Как у вас так получилось?
я в тестере ганяю советника. а после завершения работы тестера появляется информатция линий индикатора.
 
mamba5:


Вы правы. Так действительно логичнее. Исправил:

Но это особо не помогло. TaPr и StLo= 100, а PR, SL и TP почему то равны нулю.....


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

подскажите, как посчитать убыточные сделки.

тоесть сделки, которые были закрыты по стоплоссу.

а после профитной сделки обнулить счетчик.

тоесть после закрытия по тейкпрофиту обнулить счетчик.

Начальная цифра счетчика = 1

int Schetcik = 1;

Считать нужно все сделки, на покупку и на продажу.

 
Vinin:



Спасибо! ))) Пока так явно не сравнили не мог увидеть ошибку
 
belck:

подскажите, как посчитать убыточные сделки.

тоесть сделки, которые были закрыты по стоплоссу.

а после профитной сделки обнулить счетчик.

тоесть после закрытия по тейкпрофиту обнулить счетчик.

Начальная цифра счетчика = 1

Считать нужно все сделки, на покупку и на продажу.


Закрытие по стоплоссу не означает что сделка убыточная, и наоборот. Если конечно стопы и тейки были установлены при открытии и их больше не трогали
Причина обращения: