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

 
costy_:

БАЗОВЫЕ флетовые... :-)

а также БАЗОВЫЕ трэндовые ))

если евр падает и дол падает, флэт


:-)
 
costy_:
спрэды свопы учитывались в раздумьях?
Да, точно. Это из-за спредов. Свопов нет, позиции короткие. Значит советник должен быть еще более живучим, чтобы прибыль преобладала над убытком. Спасибо, буду пробовать.
 
costy_:
на то что после фор...

Да уж.... "Исчерпывающий" ответ. У любого события должны быть причины. Профи, встречаясь с какими-то неполадками знают на что обращать внимания. Просмотрела несколько раз алгоритм, но не могу найти причину Вот и обращаюсь к профи за советом - в чём могут быть причины?
 

Пытаюсь открыть отложенные ордера вот таким образом:

//+---------Функция расчета лота---------------------------------------+
double GetLot(int Risk)
{
double Free=AccountFreeMargin();
double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT);
double Step=MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot=MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot)Lot=Min_Lot;
if(Lot>Max_Lot)Lot=Max_Lot;
if(Lot*One_Lot>Free)return(0.0);
return(Lot);
}

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot)
{
double TP=0;// тейкпрофит
double SL=0;// стоплос
double PR=0;// цена
while(!IsTradeAllowed())Sleep(100);
if(TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL))
TakeProfit=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL))
StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Cmd==OP_BUYSTOP)
{
PR=NormalizeDouble(Ask, Digits);
if(TakeProfit>0)TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
if(StopLoss>0) SL=NormalizeDouble(Bid-StopLoss*Point,Digits);
}
if(Cmd==OP_SELLSTOP)
{
PR=NormalizeDouble(Bid, Digits);
if(TakeProfit>0)TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
if(StopLoss>0) SL=NormalizeDouble(Ask+StopLoss*Point,Digits);
}
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);
}

На что при проверке мне выдает:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: invalid lots amount for OrderSend function

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: OrderSend error 4051

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15: шибка открытия ордера:405

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15: Cmd-5Lot=0PR=1.4316SL=1.4419TP=1.4216

Очевидно что то с расчетом лота, но вот что не пойму))) Подскажите пожалуйста

 
LOA:

Да уж.... "Исчерпывающий" ответ. У любого события должны быть причины. Профи, встречаясь с какими-то неполадками знают на что обращать внимания. Просмотрела несколько раз алгоритм, но не могу найти причину Вот и обращаюсь к профи за советом - в чём могут быть причины?

Ну а индикатор где?! (гадаю на кофейной гуще тел.https://www.mql5.comhttps://www.mql5.com/ru/)

Ну если все перечислять, буквы закончатся.

continue break return смотрите есть прерывание фор и когда оно происходит. работает с открытием бара....

"встречаясь с какими-то неполадками знают на что обращать внимания" они не обращают внимание, а начинают отладку, начните и вы отладку своего индикатора, доп-им через принт (тем более с чужими и страниц так на 15, более 50 вызываемых функций...)

Print("дошли до инициализации, сделаем ресайз запишем все 0.0 size="+ArrayRange(buf,0)+" resize= "+ArrayResize(buf,Bars)+"  "+ArrayInitialize(buf,0.0)) ;

 

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

Я создал массив:

double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};

Однако по какой-то причине его первое значение обнуляется (-10.09 становится равным 0). Я нашёл выход из ситуации, сделав так:

double fibo[]={,-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};

Подскажите, пожалуйста, в чём здесь дело? Очень хочу разобраться.

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

 
nemo811:

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

Я создал массив:

Однако по какой-то причине его первое значение обнуляется (-10.09 становится равным 0). Я нашёл выход из ситуации, сделав так:

Подскажите, пожалуйста, в чём здесь дело? Очень хочу разобраться.

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

У меня не обнуляется с индексом = 0

double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};
Alert(fibo[0]);

2011.12.06 20:00:47 MA_TF AUDUSD,M30: Alert: -10.09


 

Вот проблемный участок кода:

  if (FIBO)
   {
    double fibo[]={-10.09,-5.854,-4.98,-4.108,-3.236,-2.618,-2.11,-1.618,-1.11,-0.618,-0.382,0,0.118,0.236,0.382,0.5,0.618,0.764,0.882,1,1.382,1.618,2.11,2.618,3.11,3.618,4.236,5.108,5.98,6.854,11.09};
    double fiboPoint = 0;
    for(i=1;i<ArraySize(fibo)+1;i++)
     {
      fiboPoint = NormalizeDouble(MinAsia+Asia*fibo[i],Digits);
      double v = 0;
      if (fibo[i]<0) v=(MathAbs(fibo[i])+1)*100;
      else v=fibo[i]*100;
      string kk;
      kk=StringConcatenate (DoubleToStr(fiboPoint,Digits)," / ",DoubleToStr(v,1),"%");
      string k=DoubleToStr (i,0);
      ObjectCreate (nameF+k, OBJ_TREND, 0,0,0,0,0,0,0);
      ObjectSet (nameF+k, OBJPROP_RAY, false);
      ObjectSet (nameF+k, OBJPROP_TIME1, TimeBegAsia);
      ObjectSet (nameF+k, OBJPROP_PRICE1, fiboPoint);
      ObjectSet (nameF+k, OBJPROP_TIME2, FlowTime);
      ObjectSet (nameF+k, OBJPROP_PRICE2, fiboPoint);
      ObjectCreate (nameFT+k, OBJ_TEXT, 0,0,0,0,0,0,0);
      ObjectSet (nameFT+k, OBJPROP_TIME1, TimeBegAsia);
      ObjectSet (nameFT+k, OBJPROP_PRICE1, fiboPoint);
      ObjectSetText (nameFT+k,kk,8,"Arial");
     }
   }

Здесь существует выше описанная проблема: не прорисовывается линия, производная от значения -10.09 (она принимает значение MinAsia).

 
nemo811:

Вот проблемный участок кода:

туц

for(i=0;i<ArraySize(fibo)/**/-/**/1;i++)
 
mamba5:

Пытаюсь открыть отложенные ордера вот таким образом:

//+---------Функция расчета лота---------------------------------------+

На что при проверке мне выдает:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: invalid lots amount for OrderSend function

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: OrderSend error 4051

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15: шибка открытия ордера:405

2011.12.06 23:36:51 2010.01.07 17:20 Big Dog 1.01 EURUSD,M15: Cmd-5Lot=0PR=1.4316SL=1.4419TP=1.4216

Очевидно что то с расчетом лота, но вот что не пойму))) Подскажите пожалуйста


Используйте давно проверенные функции для открытия ордеров как для тестера так и реалного туц
Причина обращения: