[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 407

 
costy_:

BASE FLETCHING... :-)

y también una TENDENCIA BASE ))

si el eur baja y el dol baja, plano


:-)
 
costy_:
¿se han tenido en cuenta los diferenciales de los swaps?
Sí, eso es. Es por los diferenciales. No hay intercambios, las posiciones son cortas. Por lo tanto, el Asesor Experto debe ser aún más resistente para que los beneficios prevalezcan sobre las pérdidas. Gracias, lo probaré.
 
costy_:
Sobre el hecho de que después de la for...

Sí.... Respuesta "exhaustiva". Todo evento debe tener una razón. Los profesionales, al encontrarse con algunas averías, saben a qué prestar atención. Busqué en el algoritmo varias veces, pero no puedo encontrar la causa Es por eso que me dirijo a los profesionales para el consejo - lo que podría ser la razón?
 

Estoy intentando abrir una orden pendiente como esta:

//+---------Функция расчета лота---------------------------------------+
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 Lote=MathFloor(Libre*Riesgo/100/Un_Lote/Paso)*Paso;
if(Lote<Lote_Mínimo)Lote=Lote_Mínimo;
if(Lote>Lote_máximo)Lote=Lote_máximo;
if(Lote*Uno_Lote>Libre)return(0.0);
retorno(Lote);
}

//+----------Функция открытия ордера-----------------------------------+
int NuevoOrden(int Cmd,double Lote)
{
double TP=0;//takeprofit
double SL=0;// stop loss
double PR=0;// precio
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=NormalizarDoble(Pregunta,Dígitos);
if(TakeProfit>0)TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
if(StopLoss>0)SL=NormalizeDouble(Bid-StopLoss*Point,Digits);
}
if(Cmd==OP_SELLSTOP)
{
PR=NormalizarDoble(Oferta,Dígitos);
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("Error al abrir la orden:",GetLastError()); Print("Cmd-",Cmd, "Lot=",Lot, "PR=",PR, "SL=",SL, "TP=",TP);
return(tic);
}

Cuando lo compruebo, me aparece un mensaje:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: cantidad de lotes no válida para la función OrderSend

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: Orden errónea abierta: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

Obviamente, es algo con el cálculo de los lotes, pero no entiendo qué))) Por favor, asesórese

 
LOA:

Yep.... Respuesta "exhaustiva". Todo evento debe tener una razón. Los profesionales, cuando se encuentran con alguna avería, saben a qué atenerse. He mirado el algoritmo varias veces, pero no encuentro la razón. Por eso pido consejo a los profesionales: ¿cuál puede ser la razón?

Bueno, ¿dónde está el indicador? (Supongo que por los posos del café tel. https://www.mql5.comhttps://www.mql5.com/ru/)

Bueno, si haces una lista de todo, las cartas se acabarán.

continue break return ver si hay una interrupción para y cuando sucede. funciona con la apertura de la barra....

"encontrar algunos problemas saber a qué prestar atención" no prestan atención sino que empiezan a depurar, empieza a depurar tu indicador también, por ejemplo a través de la impresión (además con el de otra persona y así 15 páginas de largo, más de 50 funciones llamadas...)

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

 

Hola.

He creado una matriz:

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};

Sin embargo, por alguna razón su primer valor pasa a cero (-10,09 se convierte en 0). Encontré una salida a la situación haciendo esto:

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};

¿Puede decirme de qué se trata? Tengo muchas ganas de entender.

Gracias de antemano.

 
nemo811:

Hola.

He creado una matriz:

Sin embargo, por alguna razón su primer valor pasa a cero (-10,09 se convierte en 0). Encontré una salida a la situación haciendo esto:

¿Puede decirme de qué se trata? Tengo muchas ganas de entender.

Gracias de antemano.

No he puesto a cero con índice = 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: Alerta: -10.09


 

Aquí está la parte problemática del código:

  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");
     }
   }

Aquí está el problema descrito anteriormente: la línea derivada del valor -10,09 no se dibuja (toma el valor de MinAsia).

 
nemo811:

Aquí está la parte problemática del código:

tuz

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

Estoy intentando abrir una orden pendiente como esta:

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

Cuando lo compruebo, me aparece un mensaje:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: cantidad de lotes no válida para la función OrderSend

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: Orden errónea abierta: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

Obviamente, es algo con el cálculo de los lotes, pero no entiendo qué))) Por favor, asesórese


Utilice las funciones de larga duración para abrir órdenes tanto para el probador como para el vendedor real
Razón de la queja: