[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 174
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
>> Veuillez me conseiller. J'ai un Expert Advisor dans une fenêtre (par exemple, USDJPY) et j'ai besoin qu'il définisse des flèches(ObjectCreate) à un certain moment dans d'autres fenêtres ouvertes, par exemple, AUDUSD, EURUSD e.t.c.
Si vous regardez dans l'aide ObjectCreate, vous pouvez clairement voir qu'elle ne fonctionne que dans un seul graphique ouvert, sur lequel l'indicateur ou le conseiller expert est situé. La sortie peut être le transfert de données à l'Expert Advisor dans la fenêtre souhaitée par le biais des variables globales ou du fichier.
Si vous regardez dans l'aide ObjectCreate, vous pouvez clairement voir qu'elle ne fonctionne que dans un seul graphique ouvert, sur lequel l'indicateur ou le conseiller expert est situé. La sortie peut être le transfert de données à l'Expert Advisor dans la fenêtre requise par le biais des variables globales ou du fichier.
C'est-à-dire qu'il n'y a aucun moyen de le faire à partir d'une autre fenêtre ? >> Merci.
Comment désactiver cette fonction de modification des ordres en attente via des variables externes?
Comment désactiver cette fonction de modification des ordres en attente via des variables externes ?
>> quelque chose comme ça.
Merci ! Vinin !
>> Je vais l'essayer.)
Programmeurs, aidez-nous s'il vous plaît, j'ai besoin d'un EA qui ouvre les ordres, même s'ils sont déjà ouverts. Il s'agit d'un EA de canal. Chaque fois qu'une ligne touche une des lignes, l'ordre correspondant doit être ouvert. Je vous remercie d'avance.
//+------------------------------------------------------------------+
//| TradeChannel.mq4 |
//| Copyright © 2005, Yuri Makarov |
//| http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov"
#property link "http://mak.tradersmind.com"
extern double Lots = 1.0;
extern int Slippage = 5;
extern int TimeOut = 10000;
double SetLevel(double Level, double NewLevel, string ObjName, int Style)
{
switch (Style)
{
case 1: // Buy Order line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 2: // Sell Order line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 3: // Buy Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 4: // Sell Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 5: // Buy Take line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 6: // Sell Take line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
}
if (MathAbs(NewLevel - Close[0]) < MathAbs(Level - Close[0])) return (NewLevel);
else return (Level);
}
int start()
{
int NumObj = ObjectsTotal();
double Spread = Ask - Bid;
double pBuy = 0;
double pSell = 0;
double pBuyStop = 0;
double pBuyTake = 0;
double pSellStop = 0;
double pSellTake = 0;
for (int i = 0; i < NumObj; i++)
{
string ObjName = ObjectName(i);
string ObjDesc = ObjectDescription(ObjName);
double Price = 0;
switch (ObjectType(ObjName))
{
case OBJ_HLINE:
Price = ObjectGet(ObjName,OBJPROP_PRICE1);
break;
case OBJ_TREND:
Price = ObjectGetValueByShift(ObjName,0);
break;
}
if (Price > 0)
{
if (ObjDesc == "Buy") pBuy = SetLevel(pBuy, Price, ObjName, 1); else
if (ObjDesc == "Sell") pSell = SetLevel(pSell, Price, ObjName, 2); else
if (ObjDesc == "Stop")
{
if (Price < Close[0]) pBuyStop = SetLevel(pBuyStop, Price, ObjName, 3);
else pSellStop = SetLevel(pSellStop, Price, ObjName, 4);
} else
if (ObjDesc == "Take")
{
if (Price > Close[0]) pBuyTake = SetLevel(pBuyTake, Price, ObjName, 5);
else pSellTake = SetLevel(pSellTake, Price, ObjName, 6);
}
}
}
int NumOrders = OrdersTotal();
int NumPos = 0;
for (i = 0; i < NumOrders; i++)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() != Symbol()) continue;
NumPos++;
double tp = OrderTakeProfit();
double sl = OrderStopLoss();
if (OrderType() == OP_BUY)
{
if (Bid > pSell && pSell > 0)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pBuyTake) > Spread || MathAbs(sl - pBuyStop) > Spread)
{
OrderModify(OrderTicket(), Ask, pBuyStop, pBuyTake, 0);
Sleep(TimeOut);
return(0);
}
}
if (OrderType() == OP_SELL)
{
if (Ask < pBuy)
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pSellTake) > Spread || MathAbs(sl - pSellStop) > Spread)
{
OrderModify(OrderTicket(), Bid, pSellStop, pSellTake, 0);
Sleep(TimeOut);
return(0);
}
}
}
if (NumPos > 0) return(0);
if ((pSell - pBuy) < Spread*2) return(0);
if (Bid > pSell && pSell > pBuyStop)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, pSellStop, pSellTake);
Sleep(TimeOut);
return(0);
}
if (Ask < pBuy && (pBuy < pSellStop || pSellStop == 0))
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, pBuyStop, pBuyTake);
Sleep(TimeOut);
return(0);
}
}
int init()
{
return(0);
}
int deinit()
{
return(0);
}
Vous êtes très probablement gêné par cette ligne :
Nous pouvons commencer par ceci. Cela devrait être supprimé.
ET Séparer le mécanisme d'entrée d'achat et de vente. Prenez la fonction de I.Kim (insérez-la à la toute fin du code)
Ensuite, la condition d'ouverture de la transaction sera achetée :
Et la condition pour ouvrir une transaction de vente :
Ce problème a probablement été résolu avant 2003, mais puisque quelqu'un d'autre ne le sait pas, je vais partager))).
Cliquez avec le bouton droit de la souris sur le graphique - sélectionnez propriétés - onglet général - cochez échelle fixe - OK
Ensuite, passez la souris sur l'échelle des prix, faites un clic gauche et maintenez-le enfoncé, déplacez la souris vers le haut/bas pour ajuster l'échelle.
Vous l'avez peut-être dans la fenêtre principale, vous n'avez donc pas à chercher bien loin.
Canal EA
Je veux demander à l'EA d'ouvrir des ordres même s'ils sont déjà ouverts. C'est un EA de canal, chaque fois qu'une ligne ou une autre est touchée, l'ordre correspondant doit être ouvert. Je pense que cet EA ouvre un ordre et n'en ouvre pas d'autre jusqu'à ce qu'il soit fermé.
J'ai fait ce que j'ai décrit dans le post ci-dessus. J'ai inséré la fonction nombre de positions et remplacé le bloc d'ouverture de position à la fin par celui-ci :
Maintenant, EA peut tenir au moins 2 positions en même temps.
Désolé, je ne peux pas le tester, car vous avez oublié de joindre l'indicateur qui dessine les canaux.