Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1067

 

Aiuto, per favore! Ci sono 2 file: un indicatore e un Expert Advisor. Come riferirsi correttamente alla funzione nell'indicatore tramite #include? iCustom non è adatto per vari motivi. Questo è ciò che ho scritto nell'indicatore:

bool BuyTrue(double& переменная, int переменная) export
{
   //тело функции

   return(true);
}   

E questo è ciò che ho scritto nell'Expert Advisor:

#import "НазваниеИндикатора.ex4"
   bool BuyTrue(double& переменная, int переменная);
if (BuyTrue(переменная, переменная))
Opn_B = true;

Ma per qualche motivo, l'Expert Advisor non funziona, l'indicatore non appare nel grafico dei prezzi durante i test. L'ho scritto correttamente, e se c'è un errore, dov'è?

 
AlexeyVik:

Tuta.


Non ne ho uno. Ma c'è sicuramente un file da qualche parte, da cui ottengo le informazioni registrate.


 

Per favore aiutatemi a compilare su mt4

FileClose' - espressione di tipo 'void' è illegale TickToCVS~.mq4 84 12

File:
 
abeiks:

Non ne ho uno. Ma c'è sicuramente un file da qualche parte e io ottengo le informazioni registrate da esso.


Il mio screenshot mostra che il menu è di MetaEditor e il tuo screenshot è di MT.
 
AlexeyVik:

Questo è il valore EMPTY_VALUE

Cercate dove sta spuntando.

Grazie. Mi avete aiutato a risolvere il problema. Il mio indicatore, quando viene caricato, calcola le barre a partire dalla prima, non da zero (l'ho fatto apposta), su zero calcola sulla storia dei tick, non sui dati storici. Ora quando cambio timeframe, lo attacco al grafico e riavvio il terminale, azzero i valori del buffer sulla barra 0, problema risolto.
 
AlexeyVik:
Il mio screenshot mostra che il menu è di MetaEditor e il tuo screenshot è di MT.
Giusto! Grazie!
 
Come posso ottenere il prezzo di apertura di un ordine nella storia e non il prezzo di una posizione aperta se questo ordine è stato attivato? Nella funzione allegata, se un ordine è scattato, questo ordine può essere trovato solo nelle posizioni, quindi non funziona. E nelle posizioni abbiamo solo il prezzo della posizione aperta ma non il prezzo dell'ordine.
double GetPriceLastCloseOrder(string sy="", int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal(); 
  double r=0;

  if (sy==NULL) sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()>1 && OrderType()<6) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderOpenPrice();
          }
        }
      }
    }
  }
  return(r);
}  
 

Ciao ragazzi, la mia domanda è: non riesco a modificare un ordine. Ci sono due aspetti, non capisco la matematica della modifica, quindi per favore spiegatemela.

Per come la vedo io, SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS

il secondo aspetto.imparato dal video XBMS

come non ho provato a cambiare i valori delle variabili nel tester eror 130 non il giusto stop loss e roba del genere

2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI inputs: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;

anche se c'è una moltiplicazione da cifre e funzione sul caso di SL sbagliato


extern double Lots = 0.1;

extern int Slippage = 10;

extern int StopLoss = 10;

extern int TakeProfit =30;

extern int RSIPeriod = 7;

extern int Magic =1087;

doppio MaRSI;


int TP,SL;

bool tfu;


//+------------------------------------------------------------------+

//| Funzione di inizializzazione dell'esperto |

//+------------------------------------------------------------------+

int OnInit()

{

se(Cifre == 3||Cifre == 5)

{

Scivolamento *= 10;

TakeProfit *= 10;

StopLoss *= 10;

}

return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'esperto |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{


}

//+------------------------------------------------------------------+

//| funzione tick esperto |

//+------------------------------------------------------------------+

void OnTick()

{

//+------------------------------------------------------------------+

//aprire la vendita

//+------------------------------------------------------------------+

MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);

se(CountTrades() <= 0&MaRSI<=30 )

{

if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0, "test",Magic,0,Green))

{ int ticket = OrderTicket();

SL = NormalizeDouble( Ask - StopLoss*Point,Digits);

TP = NormalizeDouble( Ask + TakeProfit*Point,Digits);

ModifyOrder(ticket,OrderOpenPrice(),SL,TP,0,Black);

}

}// if(CountTrades <= 0&MaRSI>=70 )

//+------------------------------------------------------------------+

//aprire l'acquisto

//+------------------------------------------------------------------+


}//ONTICK


//+------------------------------------------------------------------+

//+contatore di ordini

//+------------------------------------------------------------------+


int CountTrades ()

{

int count = 0;

for(int i = OrdiniTotali()-1;i>=0;i--)

{

if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//se l'ordine è nostro

count++;//aumentare il contatore

}//select order by index

}// order.i===primo ordine.

return(count);//restituisce il numero di ordini

}// funzione

//+------------------------------------------------------------------+

//funzione di piazzamento degli ordini con gestione degli errori

//+------------------------------------------------------------------+

int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,

double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)

{

int err = GetLastError();

errare =0;

bool exit_cikl = false;

int ticket = -1;

int Retry = 10; //numero di tentativi per impostare un ordine

int cnt = 0; //conteggio dei tentativi

if(cmd == OP_BUY || cmd == OP_SELL)

{

mentre(!exit_cikl)

{

ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);

err= GetLastError();

interruttore(err)

{

caso ERR_NO_ERROR:

exit_cikl = true;

pausa;

{ caso ERR_SERVER_BUSY:

caso ERR_NO_CONNECTION:

caso ERR_INVALID_PRICE:

caso ERR_OFF_QUOTES:

caso ERR_BROKER_BUSY:

caso ERR_TRADE_CONTEXT_BUSY:

cnt++;

pausa;

caso ERR_PRICE_CHANGED:

caso ERR_REQUOTE:

RefreshRates();

continuare;

default:

exit_cikl = true;

pausa;

}// switch switch(err)

se(cnt > Riprova)

exit_cikl = true;

se(!exit_cikl)

{

Dormire(1000);

RefreshRates();

}//se non usciamo dal ciclo if(!exit_cikl)

else

{

se(err != ERR_NO_ERROR)

{

Print("Error : " + IntegerToString(err));

}// se c'è ancora un errore if(err != ERR_NO_ERROR)

}// ALTROVE

se(err==ERR_NO_ERROR)

{

if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)

return(ticket);

}// if(err==ERR_NO_ERROR)

Print("Errore di apertura dell'ordine dopo " + IntegerToString(cnt) +"tentativi");

ritorno(-1);

} //ciclo mentre

}// se il tipo di ordine è Comprare o Vendere

return(ticket);

}// Funzione SendOrder


//-------------------------------------------------------------------------------------------------------------

/funzione modifica ordine

//------------------------------------------------------------------------------------------------------------

ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

prezzo = NormalizeDouble(prezzo,cifre);

stoploss = NormalizeDouble(stoploss,Digits);

takeprofit = NormalizeDouble(takeprofit,Digits);

CheckValidStop(Symbol(),price,stoploss);//funzione per cambiare lo stop minimo

int err = GetLastError();

err = 0 ;

int Retry = 10;

int cnt = 0;

bool exit_cikl = false;

risultato bool;

mentre(!exit_cikl)

{

risultato = OrderModify(ticket, price,stoploss,takeprofit,expiration, arrow_color);

err = GetLastError();

se(risultato == vero)

{

Print("Order #"+ IntegerToString(ticket), "successfully modified");

return(true);

}

interruttore(err)

{

caso ERR_NO_ERROR:

exit_cikl = true;

pausa;

{ caso ERR_SERVER_BUSY:

caso ERR_NO_CONNECTION:

caso ERR_INVALID_PRICE:

caso ERR_OFF_QUOTES:

caso ERR_BROKER_BUSY:

caso ERR_TRADE_CONTEXT_BUSY:

cnt++;

pausa;

caso ERR_PRICE_CHANGED:

caso ERR_REQUOTE:

RefreshRates();

continuare;

default:

exit_cikl = true;

pausa;

}// switch switch(err)

}// while(!exit_cikl)

se ( err != ERR_NO_ERROR)

{

Print("Errore nella modifica dell' ordine # " + IntegerToString(ticket));

Stampa("Codice di errore: " + IntegerToString(err));

}

}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

else

{

Print("Order selection failed, ticket = " + IntegerToString(ticket));

return(false);

}//se qualcosa va storto

return(true);

}// funzione modifica

//----------------------------------------------------------------------------------------------------

//ChtckValidStop

//--------------------------------------------------------------------------------------------------

void CheckValidStop(string symbol,double price,double& sl)

{

se(sl==0)

ritorno;

double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT);

if(MathAbs(price-sl) <= min_stop_server)

{

se(prezzo>sl)

sl = prezzo - min_stop_server;

else sl = sl + min_stop_server;

}// if(MathAbs(price-sl) <= min_stop_server)

sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))

}// funzione


 

SI PREGA DI CONSIGLIARE!!!

Ci sono due ordini nella storia del trading: 1) SELL № tic 415 STOPLOSS 1.1000 lotto 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lotto 0.02

Devo assegnare le variabili X=tick, Y=STOPLOSS e B=lot se il prezzo Asc è uguale allo STOPLOSS dell'ordine SELL. Come assegnare i primi valori al primo ordine e poi al secondo. Con me assegna sempre un valore al primo ordine.

 
m8akca:

SI PREGA DI CONSIGLIARE!!!

Ci sono due ordini nella storia del trading: 1) SELL № tic 415 STOPLOSS 1.1000 lotto 0.01 2) SELL № tic 418 STOPLOSS 1.1000 lotto 0.02

Devo assegnare le variabili X=tick, Y=STOPLOSS e B=lot se il prezzo Asc è uguale allo STOPLOSS dell'ordine SELL. Come assegnare i primi valori al primo ordine e poi al secondo. Con me assegna sempre un valore al primo ordine.

Questo argomento è pensato per aiutare coloro che hanno già qualcosa di scritto, ma non funziona proprio come vorrei. Per favore invia il tuo codice in modo che gli altri qui possano vedere cosa c'è di sbagliato e aiutarti.

E se vuoi essere scritto su ordinazione, è lì che si trova.