[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 407

 
costy_:

BASE FLETCHING... :-)

e anche un TREND BASE ))

se l'eur scende e il dol scende, piatto


:-)
 
costy_:
gli spread di swap sono stati presi in considerazione?
Sì, proprio così. È a causa degli spread. Nessuno scambio, le posizioni sono corte. Quindi l'Expert Advisor dovrebbe essere ancora più resistente in modo che i profitti prevalgano sulle perdite. Grazie, lo proverò.
 
costy_:
Sul fatto che dopo il for...

Sì.... Risposta "esaustiva". Ogni evento deve avere una ragione. I professionisti che incontrano alcuni malfunzionamenti sanno a cosa prestare attenzione. Guardato attraverso l'algoritmo diverse volte, ma non riesco a trovare la causa Ecco perché mi rivolgo ai professionisti per un consiglio - quale potrebbe essere la ragione?
 

Sto cercando di aprire un ordine pendente come questo:

//+---------Функция расчета лота---------------------------------------+
doppio 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);
ritorno(Lotto);
}

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot)
{
doppio TP=0;//takeprofit
double SL=0;// stop loss
double PR=0;// prezzo
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);
se(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);
}
se(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("Error opening order:",GetLastError()); Print("Cmd-",Cmd, "Lot=",Lot, "PR=",PR, "SL=",SL, "TP=",TP);
ritorno(tic);
}

Quando lo controllo, ricevo un messaggio:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: importo lotti non valido per la funzione 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: Ordine errato aperto: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

Ovviamente, è qualcosa con il calcolo dei lotti, ma non capisco cosa))) Si prega di consigliare

 
LOA:

Yep.... Risposta "esaustiva". Ogni evento deve avere una ragione. I professionisti, quando incontrano qualche malfunzionamento, sanno cosa cercare. Ho controllato l'algoritmo diverse volte, ma non riesco a trovare la ragione. Ecco perché chiedo consiglio ai professionisti - quale può essere la ragione?

Beh, dov'è l'indicatore?! (Immagino dai fondi di caffè tel. https://www.mql5.comhttps://www.mql5.com/ru/)

Beh, se si elenca tutto, le lettere si esauriranno.

continua break return vedere se e quando c'è un interrupt per e quando succede. funziona con l'apertura della barra....

"incontrando alcuni problemi sanno a cosa prestare attenzione" non prestano attenzione ma iniziano a fare il debugging, iniziate a fare il debugging anche del vostro indicatore, per esempio tramite stampa (per di più con quello di qualcun altro e quindi lungo 15 pagine, più di 50 funzioni chiamate...)

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

 

Salve.

Ho creato un array:

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

Tuttavia, per qualche motivo il suo primo valore va a zero (-10.09 diventa 0). Ho trovato una via d'uscita dalla situazione facendo questo:

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

Potete dirmi per favore di cosa si tratta? Molto voglio capire.

Grazie in anticipo.

 
nemo811:

Salve.

Ho creato un array:

Tuttavia, per qualche motivo il suo primo valore va a zero (-10.09 diventa 0). Ho trovato una via d'uscita dalla situazione facendo questo:

Puoi dirmi per favore di cosa si tratta? Molto voglio capire.

Grazie in anticipo.

Non ho azzerato con indice = 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: Allarme: -10.09


 

Ecco la parte problematica del codice:

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

Ecco il problema descritto sopra: la linea derivata dal valore -10.09 non viene disegnata (prende il valore di MinAsia).

 
nemo811:

Ecco la parte problematica del codice:

tuz

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

Sto cercando di aprire un ordine pendente come questo:

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

Quando lo controllo, ricevo un messaggio:

2011.12.06 23:36:50 2010.01.06 16:19 Big Dog 1.01 EURUSD,M15: importo lotti non valido per la funzione 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: Ordine errato aperto: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

Ovviamente, è qualcosa con il calcolo dei lotti, ma non capisco cosa))) Si prega di consigliare


Utilizza le funzioni di lunga durata provate per aprire ordini sia per il tester che per il vero tout