Erreurs, bugs, questions - page 2066

 

Si la ressource d'un objet BMP a été supprimée puis recréée, l'objet BMP ne voit plus sa ressource. Il s'agit d'une erreur. Vous devez maintenant supprimer l'objet et le recréer à nouveau.

 
fxsaber:

Si la ressource d'un objet BMP a été supprimée puis recréée, l'objet BMP ne voit plus sa ressource. Il s'agit d'une erreur. Vous devez maintenant supprimer l'objet et le recréer à nouveau.

Pouvez-vous nous montrer le code ? Pourquoi faut-il supprimer une ressource, on peut l'écraser/modifier sans la supprimer.
 

Situation :

Une position de marché d'un Expert Advisor tiers a été sélectionnée avec succès par OrderSelect(ticketNumber,SELECT_BY_TICKET) et une tentative est faite dans la boucle pour la fermer (la sélection de l'ordre sur le ticket a été faite avant la boucle de tentative de fermeture).


Je reçois une erreur :

2017.11.10 06:00:33.806 ExpertName EURCAD,H1: unknown ticket 1846978258 for OrderClose function

Le billet est correct.


Il est naturel que notre EA puisse fermer cet ordre indépendamment, donc

à chaque itération de la boucle, nous vérifions

if(OrderCloseTime()!=0) break;


ce qui ne donne pas le résultat souhaité et le message concernant le mauvais numéro de ticket s'affiche les 30 fois du cycle.

Une mauvaise main ou un bug avec la perte d'un ordre sélectionné ?

Ou le numéro d'erreur ne reflète pas exactement la situation/le problème ?


Mise à jour :

J'ai découvert que la position n'est pas fermée par l'EA natif, mais par celui que nous fermons.

Cependant, avant l'erreur cyclique 4108, nous obtenons une erreur unique 3 (bien qu'avant que l'erreur 3 ne soit enregistrée, l'ordre a été fermé).

 
Kirill Belousov:

Naturellement, l'EA natif pourrait clôturer cet ordre de manière indépendante, donc

A chaque itération de la boucle, la vérification est effectuée.

Nous devons aussi faire un OrderSelect.

 
Andrey Barinov:
Pouvez-vous me montrer le code ? Pourquoi supprimer la ressource, vous pouvez la retélécharger / modifier sans la supprimer.

Rechargé sans suppression sans aucun problème, bien sûr. Après la suppression, des problèmes.

#define  WIDTH 100
#define  ARGB(a,r,g,b)  ((uchar(a)<<24)|(uchar(r)<<16)|(uchar(g)<<8)|uchar(b))

bool Set( const string Name, const uint &Data[], const uint Width )
{
  return(ResourceCreate(Name, Data, Width, (Width == 0) ? ArraySize(Data) : ArraySize(Data) / Width, 0, 0, Width, COLOR_FORMAT_ARGB_NORMALIZE));
}

void Test( const string Name )  
{
  static uint Data[WIDTH * WIDTH];
  
  for (uchar i = 0; i < 100; i++)
  {
    ArrayInitialize(Data, ARGB(0xFF, i, i, 0));
    ArrayInitialize(Data, ARGB(0xFF, i, i, 0));
    
    Set(Name, Data, WIDTH);
    
    ChartRedraw();
    
    Sleep(50);
  }
  
  ResourceFree(Name);  
}

void OnStart()
{  
  const string ObjName = __FILE__;
  const string Name = "::" + ObjName;
  
  ObjectCreate(0, ObjName, OBJ_BITMAP_LABEL, 0, 0, 0);
  ObjectSetString(0, ObjName, OBJPROP_BMPFILE, Name);
  
  // Видна работа
  Test(Name);
  
  // Нет результата на экране
  Test(Name);
  
  ObjectDelete(0, ObjName);
}
 

Aucun message de

Messages du système


Aucun message, y compris le message sur le produit, la vente du produit, les remarques du modérateur et le message de validation du produit.

 
Vladislav Andruschenko:

Aucun message de

Messages du système


Aucun, y compris le message sur le produit, la vente du produit, les notes du modérateur et le message de validation du produit.

Bon après-midi.

L'erreur a été corrigée, nous devons attendre la mise à jour du site.

Nous nous excusons pour ce désagrément.

 
Julia Test:

Bon après-midi.

L'erreur a été corrigée, nous devons attendre que le site soit mis à jour.

Désolé pour le dérangement.


Merci. J'ai déjà répondu à la SD. :-) J'attends...

P.S. Ça n'a jamais été aussi calme avant ..... silence direct .........

 
fxsaber:

Vous devez également faire un OrderSelect.

Pouvons-nous avoir des détails sur la raison de cette situation ?

Nous avons sélectionné avec succès une commande sur un ticket.

Nous avons envoyé une commande de fermeture dans l'itération 1.

A cette itération #1, nous avons reçu l'erreur 3 (Paramètres de transaction invalides.) La commande a néanmoins été clôturée. Comment a-t-elle été fermée ?

Ensuite, nous obtenons l'erreur 4108 à l'itération 2. Nous ne pouvons pas le fermer en utilisant OrderCloseTime!=0.


A quel stade, selon la documentation, perd-on le lien avec l'ordre sélectionné par le ticket?

N'est-ce pas un cas où, après avoir envoyé la commande de clôture, l'ordre aurait dû être verrouillé et l'erreur 139 aurait dû être générée au lieu de 4108 ?

 
Kirill Belousov:

Ensuite, nous obtenons l'erreur 4108 à partir de l'itération 2. Et la condition OrderCloseTime!=0 ne parvient pas à sortir.

Par analogie

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

CPositionInfo - l'information est-elle à jour ou au moment de l'entrée dans le cycle ?

fxsaber, 2017.11.06 07:47

PositionGet renvoie toujours des informations au moment du dernier appel à l'une des quatre fonctions suivantes
PositionSelectByTicket
PositionGetSymbol
PositionSelect
PositionGetTicket

Cela signifie que la position peut ne pas avoir existé depuis longtemps et PositionGet conservera les anciennes informations.


Il existe une structure interne de position en lecture seule, dont les champs sont lus par les fonctions PositionGet habituelles. Il serait probablement pratique d'avoir _Position, comme _Symbol, _LastError, etc.