[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 - 5. - page 256
Pourquoi prendre des experts en malheur comme exemple ? Au minimum, ils sont uniquement destinés au testeur, au maximum, ils sont écrits avec des mains tordues, comme indiqué ci-dessus...
J'ai compris comment le mettre en œuvre, mais j'ai décidé de voir comment les autres le font.
Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?
Bonjour, je me suis penché sur mql4 depuis un moment maintenant, peut-être qu'un des programmeurs expérimentés peut m'aider. Je veux savoir comment faire pour qu'il se verrouille lorsque l'ordre atteint -30 ou -40. Je dois ajouter quelques propriétés pour que ce script verrouille les ordres dès qu'ils passent en moins.
Je veux que mon conseiller expert n'ouvre pas plus d'une transaction par jour. Pouvez-vous me dire comment faire ?
externint MagicNumber=555;
//---if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{ for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
{ if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируетсяif (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируетсяif (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,// то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.return(0);
} } }
Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?
Remarque : sur le graphique, en haut à droite, il y a un petit triangle comme celui-ci. Lorsque vous passez votre curseur dessus, une info-bulle s'afficheindiquant "Chart shift". Accrochez-le et déplacez-le vers la gauche autant que nécessaire pour faire de la place à droite.
{ for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) // Recherche des commandes dans la liste de l'historique du compte
{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // l'ordre est sélectionné parmi les ordres fermés
{
if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Si l'heure de clôture de l'ordre est supérieure ou égale au début de l'ouverture de la bougie en cours.
// Le conseiller expert ne fonctionne pas. Toute autre période peut être insérée à la place de PERIOD_D1.
Pourquoi prenez-vous des experts en malheur comme exemple ? Au minimum, ils sont conçus exclusivement pour le testeur, au maximum, ils sont écrits avec des mains tordues, comme il a été dit plus haut...
Je l'ai écrit à ma façon. Je n'ai pas particulièrement optimisé le code, je l'ai juste écrit pour le faire fonctionner et montrer la logique.
//+-------------------------------------------------------------------------------------+//| Открытие длинной позиции |//+-------------------------------------------------------------------------------------+bool OpenBuy(double initialOOP, int i)
{
int ticket;
ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
if (ticket > 0)
return (true);
}
//+-------------------------------------------------------------------------------------+//| Открытие короткой позиции |//+-------------------------------------------------------------------------------------+bool OpenSell(double initialOOP, int i)
{
int ticket;
ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
if (ticket > 0)
return (true);
}
//+-------------------------------------------------------------------------------------+//| Посылаем пачку ордеров на сервер |//+-------------------------------------------------------------------------------------+bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
if (lastPosTicket == -1) // Если нет рыночных ордеров, значит..return(false); //..сетку отложек не кидаем// if (lastPosType != g_lastPosType) // Если тикет изменился, значит..
{
lastPosType = g_lastPosType;
for (int i=1; i<=5; i++)
{
if (!OpenBuy(initialOOP, i))
return(false);
if (!OpenSell(initialOOP, i))
return(false);
}
}
}
L'étape est l'espacement de la grille de commande.
Ma question est la suivante. Ma logique est-elle correcte ? Y a-t-il un moyen d'améliorer le code pour qu'il fonctionne plus rapidement ? Du point de vue des performances...
J'ai aussi l'idée que nous devrions peut-être faire des pauses après chaque message. Dans l'ensemble, ces points sont très intéressants pour moi.
Pourquoi prendre des experts en malheur comme exemple ? Au minimum, ils sont uniquement destinés au testeur, au maximum, ils sont écrits avec des mains tordues, comme indiqué ci-dessus...
J'ai compris comment le mettre en œuvre, mais j'ai décidé de voir comment les autres le font.
Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?
Bonjour !
Je veux que mon conseiller expert n'ouvre pas plus d'une transaction par jour. Pouvez-vous me dire comment faire ?
Bonjour, je me suis penché sur mql4 depuis un moment maintenant, peut-être qu'un des programmeurs expérimentés peut m'aider. Je veux savoir comment faire pour qu'il se verrouille lorsque l'ordre atteint -30 ou -40. Je dois ajouter quelques propriétés pour que ce script verrouille les ordres dès qu'ils passent en moins.
void start()
{
double StopLoss ;
double Lots=0 ;
for(int i=0;i<OrdersTotal();i++)
{
if( !OrderSelect(i,SELECT_BY_POS))
continue ;
if(OrderSymbol() !=Symbol())
continue ;
if(OrderType()==OP_BUY)
Lots+=OrderLots() ;
if(OrderType()==OP_SELL)
Lots-=OrderLots() ;
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red) ;
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue) ;
Bonjour !
Je veux que mon conseiller expert n'ouvre pas plus d'une transaction par jour. Pouvez-vous me dire comment faire ?
Les gars, j'ai un problème vraiment horrible ! Mon graphique ne se déplace pas vers la gauche lorsque je sauvegarde le dessin ! La fonction "shift graph" est activée ! Comment puis-je le réparer ?
J'ai compris comment le mettre en œuvre, mais j'ai décidé de voir comment les autres le font.
Merci pour le conseil !
Seulement dans la variante suggérée l'expert ne travaille pas)))) Voici une variante fonctionnelle que j'ai obtenue :
if (OrdersTotal()==0) // S'il n'y a pas de positions ouvertes
{ for (int i=OrdersHistoryTotal()-1 ; i>=0 ; i--) // Recherche des commandes dans la liste de l'historique du compte
{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // l'ordre est sélectionné parmi les ordres fermés
{
if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Si l'heure de clôture de l'ordre est supérieure ou égale au début de l'ouverture de la bougie en cours.
// Le conseiller expert ne fonctionne pas. Toute autre période peut être insérée à la place de PERIOD_D1.
retour(-1) ;
} } }
Pourquoi prenez-vous des experts en malheur comme exemple ? Au minimum, ils sont conçus exclusivement pour le testeur, au maximum, ils sont écrits avec des mains tordues, comme il a été dit plus haut...
Je l'ai écrit à ma façon. Je n'ai pas particulièrement optimisé le code, je l'ai juste écrit pour le faire fonctionner et montrer la logique.
L'étape est l'espacement de la grille de commande.
Ma question est la suivante. Ma logique est-elle correcte ? Y a-t-il un moyen d'améliorer le code pour qu'il fonctionne plus rapidement ? Du point de vue des performances...
J'ai aussi l'idée que nous devrions peut-être faire des pauses après chaque message. Dans l'ensemble, ces points sont très intéressants pour moi.
Et si les autres commencent à sauter par les fenêtres ?
Ce n'est pas une panacée !