[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 539
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. Sì, e solo gli ordini di acquisto sono aperti HAYDNT ?!
//
Codice EA
//--- input parametersexterndouble MaxRisk=1.0;
externdouble FixLot = 0.01;
externdouble Exponent=2.0;
externint Magic = 888;
// костылиexternint TakeProfit=100;
externint StopLoss=100;
int init()
return(0);
}
int deinit()
{
//----//----return(0);
}
int start()
{
//----int Count=0;
double b0,b1;
int ticket;
// параметры индикатораint SF = 5; // original 5int RSI_Period = 14; // original 14double DARFACTOR = 4.236; //original 4.236//------------ Параметры из индикатора QQEA -----------------------// Buffer0 -- красная жирнаяstring Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0);
// Buffer1 -- жёлтый пунктирstring Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0);
b0=StrToDouble(Buffer0);
b1=StrToDouble(Buffer1);
double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибкеif(Lot==0)
{
Alert("Недостаточно средств!");
return(0);
}
if (Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders(Symbol(), 1, 888, 0) == true ) // проверяем наличие ордера sell
{
CloseOrder();
}
}
if (Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders(Symbol(), 0, 888, 0) == true ) // проверяем наличие ордера buy
{
CloseOrder();
}
}
Comment("Red line: ",b0,"Yellow line: ",b1);
return(0);
}
//-------------------------------------------------------------//расчёт лота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);}
bool ExistOrders(string sy="", int op=-1, int Magic=-1, datetime ot=0)
{
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//открытие нового ордераint NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофитdouble SL=0; //стоплоссdouble PR=0; //Ценаwhile(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=Ask;
if(TakeProfit>0) TP=Ask+TakeProfit*Point;
if(StopLoss>0) SL=Ask-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=Bid;
if(TakeProfit>0) TP=Bid-TakeProfit*Point;
if(StopLoss>0) SL=Bid+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
if(tic<0) Print("Ошибка открытия ордера: " ,GetLastError());
return(tic);}
// закрытие ордераvoid CloseOrder()
{double PR=0;
while(!IsTradeAllowed()) Sleep(100);
if(OrderType()==OP_BUY) PR=Bid;
if(OrderType()==OP_SELL) PR=Ask;
if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
Print("Ошибка закрытия ордера: " ,GetLastError());
return;}
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. Sì, e solo gli ordini di acquisto sono aperti HAYDNT ?!
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. E vengono aperti solo gli ordini di acquisto.
C'è un array di prezzi p[]. Ho bisogno di creare un nuovo array, la cui lunghezza è un elemento in meno, e viene contato come la differenza tra due elementi adiacenti del primo array. Se la differenza è negativa, allora moltiplicare per -1.
C'è un array di prezzi p[]. Ho bisogno di creare un nuovo array, la cui lunghezza è un elemento in meno, e viene contato come la differenza tra due elementi adiacenti del primo array. Se la differenza è negativa, allora moltiplicare per -1.
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. Sì, e solo gli ordini di acquisto sono aperti HAYDNT ?!
Codice EA
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. Sì, e solo gli ordini di acquisto sono aperti HAYDNT ?!
//
Codice EA
Sto scrivendo un EA basato sull'indicatore QQEA. Quindi, l'idea dell'EA è: quando la linea rossa attraversa la linea gialla verso l'alto, si dovrebbe aprire un ordine di acquisto, e quando la linea rossa attraversa la linea gialla verso il basso, si dovrebbe aprire un ordine di vendita. Ma non sono in grado di aprire un solo ordine. Gli ordini sono aperti finché la condizione è soddisfatta. E vengono aperti solo gli ordini di acquisto.
//
Codice EA
Mi permetta di farle una domanda.
Su quale base viene usato il tipo di stringa?
ragazzi EA usa due diversi timeframes (30 e 60), ditemi quale periodo mettere nel tester, e se il periodo di test nell'EA non cambierà?
Cosa significano queste voci di registro:
2012.01.31 14:34:45 Gestore della memoria: impossibile allocare 10436536 byte di memoria
2012.01.31 14:34:45:45 HistoryBase: memoria insufficiente 'EURGBP1' [206996 barre]
? È possibile riparare se c'è qualche problema?
Aiuto con gli array. Non funziona come vorrei.
C'è un array di prezzi p[]. Ho bisogno di creare un nuovo array, la cui lunghezza è un elemento in meno, e viene contato come la differenza tra due elementi adiacenti del primo array. Se la differenza è negativa, allora moltiplicare per -1.
c'è p [6]={1, 5, 9, 4, 6, 2, 3}
Dovremmo ottenere
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} cioè p_diff[5] = {4, 4, 5, 2, 4, 1}
Cosa significano queste voci di registro:
2012.01.31 14:34:45 Gestore della memoria: impossibile allocare 10436536 byte di memoria
2012.01.31 14:34:45:45 HistoryBase: memoria insufficiente 'EURGBP1' [206996 barre]
? È possibile riparare se c'è qualche problema?
Aiuto con gli array. Non funziona come vorrei.
C'è un array di prezzi p[]. Ho bisogno di creare un nuovo array, la cui lunghezza è un elemento in meno, e viene contato come la differenza tra due elementi adiacenti del primo array. Se la differenza è negativa, allora moltiplicare per -1.
c'è p [6]={1, 5, 9, 4, 6, 2, 3}
Dovremmo ottenere
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} cioè p_diff[5] = {4, 4, 5, 2, 4, 1}
La funzione restituisce il valore assoluto (valore modulo) del numero passato