[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 439

 
peshihod:


Je comprends qu'un ordre en attente et un ordre ouvert sont des ordres différents. Et si l'ordre en attente est ouvert, alors la tâche est réduite à la tâche initiale, à l'ordre ouvert. Si je comprends bien, cela devient très compliqué.

Quelles sont les tâches ? Peut-être, tout peut être fait d'une manière plus simple ?

Je comprends qu'un ordre en attente et un ordre ouvert sont des ordres différents. -------------- Oui (peut-être) Peut-être pas. L'essentiel est que le script se déclenche à l'ouverture de cet ordre en attente, c'est-à-dire non pas lorsqu'il est placé mais lorsqu'il est ouvert.

J'ai besoin d'aide pour écrire le script, s'il vous plaît aidez-moi, Professionnels, experts et bonnes personnes, suggérez des changements si vous voulez qu'il fonctionne.


Si j'ai un ordre en attente, son prix l'atteint et le robot doit réagir aussi. Je veux qu'il fonctionne aussi sur de telles commandes.

Eh bien, je le teste maintenant et cela fonctionne. Pourquoi ça n'a pas marché dans le 1er test hmmm... Peut-être à cause du redémarrage de l'ordinateur... Mais après le redémarrage prévu, le robot a souri (a fonctionné).

Encore un détail. Ce script ne fonctionne pas sur les graphiques historiques, et pourquoi ?

//+------------------------------------------------------------------+
//| Order_act.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
int Order_array[200];
int Total=0;
int j,pos,count,order_tick,type;
bool found;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
// создаем список ордеров (туда входят и открытые, и отложенные)
Total=OrdersTotal();

for(pos=0;pos<Total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{ Order_array[pos]=OrderTicket();}
}

// проверочная часть скрипта
int i=0;
while ( !IsStopped() )
{
count=OrdersTotal();
for(pos=0;pos<count;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
{
found=false;
order_tick=OrderTicket();

for (j=0;j<Total;j++)
{

if (order_tick==Order_array[j]) {found=true;}
}
if (!found)
{
type=OrderType();

if ((type==OP_BUY) || (type==OP_SELL))
{
Total++; // в случае,если есть новый открытый
Order_array[Total-1]=order_tick; //ордер - добавляем в список

Alert("Новый открытый ордер"); // и делаем с ним что хотим

}
}
}
// если планируется, что скрипт будет работать долго или открываемся часто
// удаляем из списка все закрытые ордера чтобы не было переполнения.
// А чтобы работало быстрее, количество записей можно уменьшить (лишь бы не превысило
// максимально возможного числа открытых и отложенных поз.
if (Total>190)
{
for (j=0;j<Total;j++)
{
if(OrderSelect(Order_array[j],SELECT_BY_TICKET)==true)
{
if (OrderCloseTime()!=0)
{
Alert("нашли закрытый в списке и удалили");
for (i=j+1;i<Total;i++) {Order_array[j]=Order_array[i];}
Total--;
}
}
}
}
Sleep(100);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+

Его написал RAVen_ Спасибо этому профессионалу .

 

Chers professionnels,

Comment puis-je apprendre à un EA à lire les informations d'une autre fenêtre, où un autre EA travaille sur la même paire de devises ?

 
demlin:

Chers professionnels,

Comment puis-je apprendre à un EA à lire les informations d'une autre fenêtre, où un autre EA travaille sur la même paire de devises ?


Essayez de suivre une autre voie, à savoir échanger des valeurs entre EAs en utilisant des variables globales... Je ne les ai pas utilisés moi-même, je ne connais pas les détails, cherchez-les et voyez comment ils sont utilisés...
 
demlin:

Chers professionnels,

Comment puis-je apprendre à un EA à lire les informations d'une autre fenêtre où un autre EA travaille sur la même paire de devises ?

Il existe également une telle bibliothèque.
 
semiromid:

Je comprends qu'un ordre en attente et un ordre ouvert sont des ordres différents. -------------- Oui (peut-être) Peut-être pas. L'essentiel est que le script fonctionne lorsque l'ordre en attente est ouvert, c'est-à-dire non pas lorsqu'il est placé mais lorsqu'il est ouvert.


Il s'agit de déterrer un couple d'arbres avec une pelleteuse ! Quel est l'intérêt de séparer les ordres ? Le prix est le même pour tous. Les commandes sont toujours traitées ensemble, en vrac, par la même meilleure variante.

En d'autres termes, peu importe qui passe les ordres, ce qui compte, ce sont les paramètres de chaque ordre individuel. Vous cherchez un vide.

Si nous devons exécuter la tâche 1 et la tâche 2, nous devons vérifier pour chaque ordre si la tâche nécessaire a été exécutée ou non. Et il n'est pas nécessaire de vérifier si cet ordre est ouvert maintenant, ou juste avant, ou encore s'il est sur le point d'être ouvert.

 
peshihod:


C'est déterrer quelques arbres avec une pelleteuse ! Quel est l'intérêt de séparer les ordres ? Le prix est le même pour tous. Les commandes sont toujours traitées ensemble, en vrac, à la même meilleure option.

En d'autres termes, peu importe qui passe les commandes, ce qui compte, ce sont les paramètres de chaque commande individuelle. Vous cherchez un vide.

Si nous devons exécuter la tâche 1 et la tâche 2, nous devons vérifier pour chaque ordre si la tâche nécessaire a été exécutée ou non. Et il n'est pas nécessaire de vérifier si cet ordre est ouvert maintenant, ou juste un peu plus tôt, ou encore s'il est sur le point d'être ouvert.

Il s'agit de déterrer un couple d'arbres avec une pelleteuse ! ----------- Quelle option plus simple existe-t-il ?

Quel est l'intérêt de fractionner les commandes ? -------------- Je dois diviser mes ordres en bouée et en vente. Ou vous voulez dire le traitement des ordres ? Donnez-moi au moins un indice pour simplifier le script ?

Stano, je le teste maintenant, tout fonctionne. Pourquoi cela n'a pas fonctionné dans le 1er test hmm... Peut-être parce qu'il y a eu un redémarrage de l'ordinateur... Mais après un redémarrage programmé, le robot était souriant (fonctionnait). Quelles sont les raisons pour lesquelles ça n'a pas marché ? Peut-être qu'un dysfonctionnement similaire se produira à l'avenir.

 

Bonne journée à tous.

J'ai une question. Supposons qu'il existe un indicateur XXXXXXX (le nom n'a pas d'importance).

Malheureusement, je n'ai pas le code source de l'indicateur. Par conséquent, je ne comprends pas sur quoi il se base).

Puis-je développer un Expert Advisor basé sur les signaux de l'indicateur XXXXXXXXX pour ouvrir des ordres de vente et d'achat ?

Voici un exemple sur une capture d'écran

 
FreeSerfer:

Bonne journée à tous.

J'ai une question. Supposons qu'il existe un indicateur XXXXXXX (le nom n'a pas d'importance).

Malheureusement, je n'ai pas le code source de l'indicateur. Par conséquent, je ne comprends pas sur quoi il se base).

Puis-je développer un Expert Advisor basé sur les signaux de l'indicateur XXXXXXXXX pour ouvrir des ordres de vente et d'achat ?

Voici un exemple sur une capture d'écran


Oui, peut-être. Je peux même deviner quel genre de dinde... :-)))
 

Veuillez me conseiller. Comment puis-je faire en sorte que ce robot achète en 20 secondes ?

Je ne veux pas qu'il achète en 20 secondes, puis que le prix vaille encore 20 secondes, de sorte qu'il ne gagne qu'en 40 secondes.

int start()
{

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point, "Order #", 0) ; // ouvre un ordre d'achat
Sleep(20000) ; // Temporisation pendant 20 secondes

return(0) ;
}

 
Un script en boucle est nécessaire pour fonctionner par temps, et non par tics.