Je suis en train d'écrire un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Oui, et seuls les ordres d'achat sont ouverts HAYDNT ? !
//
Code 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;}
J'écris un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Oui, et seuls les ordres d'achat sont ouverts HAYDNT ? !
J'écris un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Et seuls les ordres d'achat sont ouverts.
Les gars EA utilisent deux périodes différentes (30 et 60), dites-moi quelle période mettre dans le testeur, et si la période de test dans l'EA ne changera pas ?
Aide avec les tableaux. Ça ne fonctionne pas comme je le voudrais.
Il existe un tableau de prix p[]. Je dois créer un nouveau tableau, dont la longueur est inférieure d'un élément, et qui est compté comme la différence entre deux éléments adjacents du premier tableau. Si la différence est négative, il faut la multiplier par -1.
Aide avec les tableaux. Ça ne fonctionne pas comme je le voudrais.
Il existe un tableau de prix p[]. Je dois créer un nouveau tableau, dont la longueur est inférieure d'un élément, et qui est compté comme la différence entre deux éléments adjacents du premier tableau. Si la différence est négative, il faut la multiplier par -1.
Je suis en train d'écrire un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Oui, et seuls les ordres d'achat sont ouverts HAYDNT ? !
Code EA
J'écris un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Oui, et seuls les ordres d'achat sont ouverts HAYDNT ? !
//
Code EA
J'écris un EA basé sur l'indicateur QQEA. L'idée de l'EA est la suivante : lorsque la ligne rouge croise la ligne jaune vers le haut, un ordre d'achat doit être ouvert, et lorsque la ligne rouge croise la ligne jaune vers le bas, un ordre de vente doit être ouvert. Mais je ne suis pas en mesure d'ouvrir une seule commande. Les commandes sont ouvertes tant que la condition est remplie. Et seuls les ordres d'achat sont ouverts.
//
Code EA
Laissez-moi vous poser une question.
Sur quelle base le type de chaîne est-il utilisé ?
Les gars EA utilisent deux périodes différentes (30 et 60), dites-moi quelle période mettre dans le testeur, et si la période de test dans l'EA ne changera pas ?
Que signifient ces entrées de journal :
2012.01.31 14:34:45 Gestionnaire de mémoire : ne peut pas allouer 10436536 octets de mémoire
2012.01.31 14:34:45:45 HistoryBase : pas assez de mémoire 'EURGBP1' [206996 barres].
? Est-il possible de réparer s'il y a un problème ?
Aide avec les tableaux. Ça ne fonctionne pas comme je le voudrais.
Il existe un tableau de prix p[]. Je dois créer un nouveau tableau, dont la longueur est inférieure d'un élément, et qui est compté comme la différence entre deux éléments adjacents du premier tableau. Si la différence est négative, il faut la multiplier par -1.
il y a p [6]={1, 5, 9, 4, 6, 2, 3}
Nous devrions obtenir
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} c'est-à-dire p_diff[5] = {4, 4, 5, 2, 4, 1}
Que signifient ces entrées de journal :
2012.01.31 14:34:45 Gestionnaire de mémoire : ne peut pas allouer 10436536 octets de mémoire
2012.01.31 14:34:45:45 HistoryBase : pas assez de mémoire 'EURGBP1' [206996 barres].
? Est-il possible de réparer s'il y a un problème ?
Aide avec les tableaux. Ça ne fonctionne pas comme je le voudrais.
Il existe un tableau de prix p[]. Je dois créer un nouveau tableau, dont la longueur est inférieure d'un élément, et qui est compté comme la différence entre deux éléments adjacents du premier tableau. Si la différence est négative, il faut la multiplier par -1.
il y a p [6]={1, 5, 9, 4, 6, 2, 3}
Nous devrions obtenir
p_diff[5] = {-1*(1-5), -1*(5-9), 9-4, -1*(4-6), 6-2, -1*(2-3)} c'est-à-dire p_diff[5] = {4, 4, 5, 2, 4, 1}
La fonction renvoie la valeur absolue (valeur modulo) du nombre qui lui est passé.