[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 84
Comme vous l'avez peut-être remarqué, la véritable raison n'est pas de regarder le code, mais de comprendre comment il fonctionne. Si vous faites confiance au conseiller expert, je vous souhaite de réussir et que tout se passe bien).
J'ai personnellement inventé un vélo et écrit mon hibou à partir de rien, mais je sais où et comment les choses fonctionnent et je sais pourquoi elles ne fonctionnent pas et où chercher les erreurs).
c'est à peu près tout)
Merci. Je suis déjà sur la bonne voie !)))) J'ai dû creuser un peu, mais j'ai implémenté ce que je voulais (au moins, ça fonctionne d'une certaine manière :))) ).
Savez-vous comment configurer le contrôle des numéros de commande ? Je suis d'accord, la question suscite probablement un sourire non déguisé, se transformant en rire par endroits.)))) Mais ça ne fait qu'une semaine que je fouille dans les codes mt-sh. Je ne connais pas encore tous les mots )))) Intelligent :)))
nemo811: Savez-vous comment configurer le contrôle des numéros de commande ? Je suis d'accord, la question provoque probablement un sourire non déguisé, qui se transforme en rire à certains endroits)))). Mais ça ne fait qu'une semaine que je fouille dans les codes mt-sh. Je ne connais pas encore tous les mots )))) intelligent ;))
je ne peux pas me qualifier d'expert))))
Je ne suis pas tout à fait sûr de ce que signifie le contrôle des numéros... Si vous devez ouvrir un ordre deux fois sous certaines conditions, alors vous devez créer cette condition.
En général, j'ai commencé à écrire mon propre programme il y a environ six mois, et un détail simple m'a aidé : pensez à ce que vous voulez que l'EA fasse ou à un morceau de code spécifique.
Dans ce cas, il serait plus facile de donner un exemple, et je pourrai alors dire plus précisément ce qu'il faut faire et comment le faire, si je connais la solution :).
Le code a fonctionné - merci. Mais lorsque des personnes expérimentées prononcent de tels mots, on commence à se demander ce qui ne va pas.
)))
Si le code fait ce qu'il est censé faire - alors c'est tout))) ce que j'ai probablement voulu dire, c'est que le code peut ouvrir des ordres non-stop, mais nous l'avons fait de sorte que tout s'ouvre et se reporte une fois. donc c'est OK)
Si le code fait ce qu'il est censé faire, alors c'est OK) ; ce que je voulais probablement dire, c'est que le code peut ouvrir des ordres sans arrêt, mais nous l'avons fait une fois par ouverture et report).
Au fait, je recommande de mettre quelque chose comme
if ( OrdersTotal()!=0)
{
BUY = false;
BUY_STOP = false;
BUY_LIMIT = false;
SELL = false;
SELL_STOP = false;
SELL_LIMIT = false;
}
il s'agit d'une protection au cas où vous auriez des positions ouvertes et que vous deviez redémarrer le client, sinon il rouvrira tout un lot d'ordres.
je recommande également de demander : pensez logiquement à chaque ligne - ce qui peut l'empêcher de fonctionner.
Voici une version légèrement dépassée de ce sur quoi je travaille actuellement. L'auteur drknn m'a donné la permission de le télécharger.
Il ne s'est pas contenté de donner la permission de le mettre en ligne, il a ouvertement donné la permission de modifier le code comme bon vous semble, de le vendre et même d'en faire un copyright à qui vous voulez :)
Au fait, je recommande de mettre quelque chose comme
if ( OrdersTotal()!=0)
{
BUY = false;
....
il s'agit d'une protection dans le cas où vous avez des positions ouvertes au cas où vous devez redémarrer le client. sinon, il rouvrira un lot d'ordres entier.
Merci - c'est un point important. J'ai résolu ce problème et ajouté des compteurs (merci à sergeev) pour compter les commandes.
Le code se présente maintenant comme suit (il n'ouvre pas de données inutiles lors du redémarrage du terminal) :
//--------------------------------------------------------------------externint MAGIC = 0; //уникальный номер ордераexternbool BUY = false; //открыть ордер BUYexternbool BUY_STOP = false; //поставить ордер BUY STOPexternbool BUY_LIMIT = false; //поставить ордер BUY LIMITexternbool SELL = false; //открыть ордер SELLexternbool SELL_STOP = false; //поставить ордер SELL STOPexternbool SELL_LIMIT = false; //поставить ордер SELL LIMITexterndouble Lot = 0.1; //объем ордераexternint takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляетсяexternint stoploss = 0; //уровень выставления SL, если 0, то SL не выставляетсяexternint DistanceSet = 40; //расстояние от рынка для отложенникаexternint Proskalz = 3; //максимально допустимое отклонение цены для рыночных ордеров//--------------------------------------------------------------------double SL,TP;
//--------------------------------------------------------------------int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy");
BUY=false;
}
if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell");
SELL=false;
}
if (BUY_STOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask + DistanceSet*Point - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Stop");
BUY_STOP=false;
}
if (SELL_STOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid - DistanceSet*Point + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Stop");
SELL_STOP=false;
}
if (BUY_LIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask - DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - DistanceSet*Point - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit");
BUY_LIMIT=false;
}
if (SELL_LIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid + DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + DistanceSet*Point + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit");
SELL_LIMIT=false;
}
return(0);
}
void OPENORDER(string ord)
{
int SchBuy=SchBuy_b(MAGIC);
int SchSell=SchSell_b(MAGIC);
int SchBuyStop=SchBuyStop_b(MAGIC);
int SchSellStop=SchSellStop_b(MAGIC);
int SchBuyLimit=SchBuyLimit_b(MAGIC);
int SchSellLimit=SchSellLimit_b(MAGIC);
int ticket = -1;
int err;
while (ticket<0)
{
if (SchBuy<1) {if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (SchSell<1) {if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (SchBuyStop<1) {if (ord=="Buy Stop") ticket=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (SchSellStop<1) {if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (SchBuyLimit<1) {if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (SchSellLimit<1) {if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
if (ticket==-1) //неудачная попытка
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (ticket || err >10) return;
}
return;
}
//--------------------------------------------------------------------void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
case1: return;
case2: Alert("Нет связи с торговым сервером ",Symbol());return;
case3: Alert("Error неправильные параметры ",Symbol());return;
case130: Alert("Error близкие стопы Ticket ",Symbol());return;
case134: Alert("Недостаточно денег ",Symbol());return;
case146: Alert("Error Подсистема торговли занята ",Symbol());return;
case129: Alert("Error Неправильная цена ",Symbol());return;
case131: Alert("Error Неправильный объем ",Symbol());return;
case4200:Alert("Error Объект уже существует ",Symbol());return;
default: Alert("Error " ,err," ",Symbol());return;
}
}
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Comme vous l'avez peut-être remarqué, la véritable raison n'est pas de regarder le code, mais de comprendre comment il fonctionne. Si vous faites confiance au conseiller expert, je vous souhaite de réussir et que tout se passe bien).
J'ai personnellement inventé un vélo et écrit mon hibou à partir de rien, mais je sais où et comment les choses fonctionnent et je sais pourquoi elles ne fonctionnent pas et où chercher les erreurs).
c'est à peu près tout)
Merci. Je suis déjà sur la bonne voie !)))) J'ai dû creuser un peu, mais j'ai implémenté ce que je voulais (au moins, ça fonctionne d'une certaine manière :))) ).
Savez-vous comment configurer le contrôle des numéros de commande ? Je suis d'accord, la question provoque probablement un sourire non déguisé, qui se transforme en rire à certains endroits)))). Mais ça ne fait qu'une semaine que je fouille dans les codes mt-sh. Je ne connais pas encore tous les mots )))) intelligent ;))
je ne peux pas me qualifier d'expert))))
Je ne suis pas tout à fait sûr de ce que signifie le contrôle des numéros... Si vous devez ouvrir un ordre deux fois sous certaines conditions, alors vous devez créer cette condition.
En général, j'ai commencé à écrire mon propre programme il y a environ six mois, et un détail simple m'a aidé : pensez à ce que vous voulez que l'EA fasse ou à un morceau de code spécifique.
Dans ce cas, il serait plus facile de donner un exemple, et je pourrai alors dire plus précisément ce qu'il faut faire et comment le faire, si je connais la solution :).
exemple à la page 83, tâche de sergeev
Le code a fonctionné - merci. Mais lorsque des personnes expérimentées prononcent de tels mots, on commence à se demander ce qui ne va pas.
)))
exemple à la page 83, tâche de sergeev
Le code a fonctionné - merci. Mais lorsque des personnes expérimentées prononcent de tels mots, on commence à se demander ce qui ne va pas.
)))
Si le code fait ce qu'il est censé faire - alors c'est tout))) ce que j'ai probablement voulu dire, c'est que le code peut ouvrir des ordres non-stop, mais nous l'avons fait de sorte que tout s'ouvre et se reporte une fois. donc c'est OK)
Si le code fait ce qu'il est censé faire, alors c'est OK) ; ce que je voulais probablement dire, c'est que le code peut ouvrir des ordres sans arrêt, mais nous l'avons fait une fois par ouverture et report).
Bien. Merci encore.
Au fait, je recommande de mettre quelque chose comme
if ( OrdersTotal()!=0)
{
BUY = false;
BUY_STOP = false;
BUY_LIMIT = false;
SELL = false;
SELL_STOP = false;
SELL_LIMIT = false;
}
il s'agit d'une protection au cas où vous auriez des positions ouvertes et que vous deviez redémarrer le client, sinon il rouvrira tout un lot d'ordres.
je recommande également de demander : pensez logiquement à chaque ligne - ce qui peut l'empêcher de fonctionner.
Voici une version légèrement dépassée de ce sur quoi je travaille actuellement. L'auteur drknn m'a donné la permission de le télécharger.
Il ne s'est pas contenté de donner la permission de le mettre en ligne, il a ouvertement donné la permission de modifier le code comme bon vous semble, de le vendre et même d'en faire un copyright à qui vous voulez :)
Mais ne vous battez pas pour les droits là-bas :)
via l'indicateur https://docs.mql4.com/ru/indicators/iBandsOnArray
Au fait, je recommande de mettre quelque chose comme
if ( OrdersTotal()!=0)
{
BUY = false;
....
il s'agit d'une protection dans le cas où vous avez des positions ouvertes au cas où vous devez redémarrer le client. sinon, il rouvrira un lot d'ordres entier.
Merci - c'est un point important. J'ai résolu ce problème et ajouté des compteurs (merci à sergeev) pour compter les commandes.
Le code se présente maintenant comme suit (il n'ouvre pas de données inutiles lors du redémarrage du terminal) :
+ compteurs appropriés.
Merci.