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

 
Dimka-novitsek:
Lorsque l'EA ne démarre rien, c'est juste pour vérifier si de nouveaux ordres ne s'ouvrent pas à chaque tick
.
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

Voici votre code, je n'ai fait aucune modification

Vous avez écrit que l'ordre sera placé si vous sélectionnez l'ordre tiket du symbole donné et la magie donnée et les ordres totaux de moins de 2

 
Merci ! !! Je suis désolé, et j'ai vraiment écrit des bêtises.
 
drknn:


Sans le code, il est difficile de se prononcer. Il est tout à fait possible que l'EA soit écrit pour quatre chiffres, alors que le compte de démonstration est à cinq chiffres. Vous comprenez que si nous fixons, par exemple, un stop loss de 10 pips, cela représente la même distance pour un EA à cinq chiffres que 1 pip pour un EA à quatre chiffres. Si nous fixons la distance minimale autorisée pour l'établissement des ordres stop à, disons, 3 points, alors sur un marché à cinq chiffres, ce serait trente points au lieu de trois. Le serveur rejettera, de manière tout à fait compréhensible, la commande visant à définir un ordre avec un stop de 10 points sur les cinq chiffres.

Mais la raison peut être différente. Vous voyez, vous avez demandé aux gens pourquoi leur voiture ne démarrait pas. On ne peut pas vous dire la raison sans ouvrir le capot et écouter comment la voiture réagit aux tentatives de démarrage...

J'ai essayé de lancer un testeur de stratégie par EURUSD et de l'exécuter par plusieurs devises, EURUSD, GBPUSD, USDJPY, mais cela n'a pas fonctionné. J'ai utilisé Point lors de l'envoi d'ordres d'achat/de vente, donc cela devrait fonctionner pour tous les symboles. Ce que je ne comprends pas le plus, c'est pourquoi le testeur montre des résultats, mais l'EA n'ouvre pas de positions sur un compte de démonstration. Dans quels cas cela peut-il se produire ?

En tout cas, merci pour la réponse, je posterai le code dans la soirée.

 
Dimka-novitsek:


Excusez-moi, j'ai écrit des bêtises ici, si vous pouviez me montrer où je suis complètement moutonnier.

Tous : )))))))))))))))))))

Commençons par le début :

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

Au départ, deux variables sont initialisées à zéro :

int      tiket, tikett;

alors la première ligne de code est celle où nous sélectionnons la commande de billets :

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

ici la variable ticket est nulle. C'est-à-dire que nous essayons de sélectionner un ordre avec un ticket zéro. Ce faisant, nous n'avons même pas lu l'aide, puisque le paramètre pool est ignoré lors de la sélection par ticket, et que nous spécifions toujours MODE_TRADES. Ce n'est pas une erreur - c'est un paramètre supplémentaire dans ce cas qui est simplement ignoré. En conséquence, la commande avec un ticket zéro n'est pas sélectionnée - elle n'existe pas...

En outre, tout va dans les conditions imbriquées ; la première condition est :

if(OrderSymbol()==Symbol())

... Si le symbole de l'ordre sélectionné correspond au symbole du graphique actuel... Et comme aucun ordre n'a été choisi, nous arriverons en toute sécurité à la sortie de start() sans rien faire.

Je peux vous assurer... Un peu plus loin, vous avez des choses non moins intéressantes, mais... Ce n'est pas intéressant de fouiller.

Commencez par rechercher les positions déjà ouvertes ou les ordres en attente qui ont été fixés.

Bonne chance.

 
ilunga:

c'est votre code, je n'ai fait aucune modification

Vous avez écrit que les ordres seront placés si vous sélectionnez l'ordre tiket du symbole donné et l'ordre magique donné et qu'il y a moins de 2 ordres au total.


Ah, non, c'est vrai, lorsque vous lancez un ordre inférieur à deux, deux ordres en attente sont placés, et au prochain tick, il y en a deux et rien ne se passe.

Je dois avoir une sorte de crise dans ma tête.

 
Dimka-novitsek:


Ah, non, c'est vrai, lorsque vous lancez un ordre inférieur à deux, deux ordres en attente sont placés, et au tick suivant il y en a deux et rien ne se passe.

Je dois avoir une sorte de crise dans ma tête.

Je vous ai déjà dit étape par étape où vous avez une crise...
 
Sersad:

J'ai exécuté un testeur de stratégie sur EURUSD, j'ai essayé de l'exécuter sur plusieurs devises, EURUSD, GBPUSD, USDJPY - cela n'a fonctionné nulle part. J'ai utilisé Point pour envoyer des ordres d'achat/de vente, donc cela devrait fonctionner pour tous les symboles. Ce que je ne comprends pas le plus, c'est pourquoi le testeur montre des résultats, mais l'EA n'ouvre pas de positions sur un compte de démonstration. Dans quels cas cela peut-il se produire ?

En tout cas, merci pour la réponse, je posterai le code dans la soirée.


Le fait est que la valeur du point est différente.

 
PapaYozh:


C'est là tout le problème : la valeur du point varie.

La valeur du point diffère d'une cotation à l'autre, mais son essence est la même pour toutes les cotations avec un nombre quelconque de décimales - il s'agit de l'échelon de prix minimum.

C'est pourquoi le fait que j'ai utilisé pour un stop-loss, par exemple, Ask-30*Point au lieu de Ask-0.003 annule le commentaire de drknn.

"Il est tout à fait possible que l'EA soit écrit en quatre chiffres, alors que le compte de démonstration est en cinq chiffres. Vous voyez, si vous définissez, par exemple, un ordre de perte stop de 10 points, cela représente la même distance sur un EA à cinq chiffres que 1 pip sur un EA à quatre chiffres. Si nous fixons la distance minimale autorisée pour l'établissement des ordres stop à, disons, 3 points, alors sur un marché à cinq chiffres, ce serait trente points au lieu de trois. Il est clair que le serveur rejetterait tout simplement la commande visant à définir un ordre avec un stop de 10 points...".

double Point - Taille du point de l'instrument actuel dans la devise de cotation.
 

Un conseil.

J'ai écrit un script simple pour sortir la valeur du niveau minimum de stop loss/stake profit en pips.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
Alert(min) ;
return(0) ;
}

La sortie est de zéro. S'agit-il d'une valeur standard pour ce paramètre ?

 

fx_max:

J'ai écrit un script simple qui donne la valeur du niveau minimum autorisé de stop loss/stake profit en pips.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL) ;

Il sort zéro. S'agit-il d'une valeur standard pour ce paramètre ?


pas de