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

 
r772ra:
Alternativement, vous pouvez définir n'importe quel moment après l'arrivée du signal
Ma variante implique une limite (après l'arrivée du signal) pour effectuer certaines actions (dans ce cas pour ouvrir un ordre) de 1 minute. Et puis : si vous êtes en retard, vous êtes en retard. Supposons que la connexion avec le serveur soit interrompue juste après la réception du signal et qu'elle reprenne dans une heure. Pourquoi ouvrir une commande une heure plus tard ? ;)
 
TarasBY:

Dans une variable globale, écrivez la valeur du temps au moment du signal :

puis comptez vos minutes (vous pouvez le faire) :

C'est l'une des solutions pour suivre le temps après un événement.


Malheureusement, cela ne fonctionne pas, après une minute, la ligne de support et la ligne de résistance devraient être dessinées comme une action, mais pour une raison quelconque, elles ne sont pas sur le graphique. Regardez le code, où se trouve l'erreur ?


bool  Fact_1 = false;                    // Глобальная перемен для бай.    
bool  Fact_2 = false;                    // Глобальная перемен для бай
bool  Fact_3 = false;                    // Глобальная перемен для бай

double support;
double resist;

 int timeFrame = 5;
 int numBars = 15;
 datetime gdt_TimeSignal;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

  ObjectsDeleteAll();  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


   //---------------------------------------------------------------------------
if (Fact_3==true)                            //Если событие уже..
          
                                              //..было, то выходим
     return(0);
 
//----

  //---- БЛОК ОТКРЫТИЯ  BUY--------------------------------------------------------------
 
 if (iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,2)<iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0)&&
iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,1)>=iMA(NULL,PERIOD_M5,200,0,MODE_EMA,PRICE_CLOSE,0))//если МА50 пересекает МА200 снизу вверх по M5
Fact_1 = true;       // Произошло событие 1  
//-
if (Fact_1 == true &&  Low[0]<= iMA(NULL,PERIOD_M5,50,0,MODE_EMA,PRICE_CLOSE,0))//если цена опустилась до МА50
 Fact_2 = true; // Произошло событие 2  


//if (Signal) gdt_TimeSignal = TimeCurrent();
if (Fact_2) gdt_TimeSignal = TimeCurrent();


  if (gdt_TimeSignal != 0) if (iBarShift (NULL, 1, gdt_TimeSignal) == 1)
    {
        //---- Открываете ордер
       // OrderSend ();
  //---------------------------------------------------------------------------------    
{
// Определяем линии поддержки\сопротивления
  support = 10000;
  resist = 0;
 
  for(int u = 1;u<=numBars;u++)
  {
   if(support>iLow(Symbol(),timeFrame,u))
     support = iLow(Symbol(),timeFrame,u);
   if(resist<iHigh(Symbol(),timeFrame,u))
     resist = iHigh(Symbol(),timeFrame,u);
  }   
   ObjectSet("lineSupport",OBJPROP_PRICE1,support);
  ObjectSet("lineResist",OBJPROP_PRICE1,resist);
 
 }


 //----
  {
    ObjectCreate("lineSupport",OBJ_HLINE,0,0,0);
    ObjectSet("lineSupport",OBJPROP_COLOR,Blue);
    
    ObjectCreate("lineResist",OBJ_HLINE,0,0,0);
    ObjectSet("lineResist",OBJPROP_COLOR,Red);
    }
//-------------------------------------------------------------
 
        gdt_TimeSignal = 0;
    }



//что сюда добавить что бы линии появившись, оставались на месте?




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

 
TarasBY:

Il y a des absurdités écrites ici :

Lisez à propos de iCustom().


Merci. Je l'ai lu. Je devrais peut-être chercher un exemple. Je ne comprends rien à rien.
 
Andrey-F:

S'il vous plaît, aidez-moi, dites-moi comment implémenter le code EA en deux ou trois lignes :

Lorsqu'un signal arrive (par exemple le croisement de deux MAs)

1. l'Expert Advisor détermine le temps du signal (en heures, minutes), le stocke ;

2. compte à rebours d'une minute.

Ensuite, le conseiller expert est prêt à effectuer une action (par exemple, ouvrir un ordre).

Tous, MERCI, tout fonctionne comme il se doit, je n'ai juste pas inséré le signal de la bonne manière.
 

Je n'arrive pas à comprendre la publication de l'indicateur dans Codabase. Comme un statut est prêt pour la publication ie logiquement doivent attendre jusqu'à ce que le modérateur sera placé dans l'accès général cette dinde, mais il a été quelques jours et aucun résultat. Quel peut être le problème ?

ps. c'est ma première publication du code ici

 
madzx:

Oui, je pense que oui ! J'ai vraiment pris le coup de main, je peux facilement me passer de l'écriture sur disque !
J'attache juste les rênes d'un terminal standard à un autre.
Je suis juste en train d'attacher les rênes d'un terminal standard pour un autre).

Pardonnez-moi, mais nous allons devoir le faire de toute façon.
car comme l'a dit Sir Freddie Mercury.
Le spectacle doit continuer !

Mettons les choses au clair.
Comme je le comprends :

1. Sur un compte, j'ai un nombre impressionnant de fenêtres ouvertes (10 pièces) avec n'importe quel ensemble de graphiques de paires de devises.

2. Sur chaque graphique se trouve un cheval de trait - un conseiller expert, qui fait quelque chose.

3. le compte doit répondre aux conditions suivantes :

3.1 Le nombre total d'ordres ouverts sur le marché dans le compte ne doit pas dépasser 5.
Les ordres de type cheval (en attente) ne devraient pas être comptés comme tels (je le pense, mais vous ne l'avez pas précisé).
3.2 Sur la base d'un ensemble de graphiques sur le compte, une certaine liste de symboles est formée,

Le type d'instruments financiers négociés et chacun des instruments ne peut avoir plus d'un ordre ouvert à tout moment.

à un moment donné, ne peut avoir plus d'un ordre ouvert.

---------------------------------------------------------

Quelque chose comme ça ! Vérifiez si tout est correct !
Alors dites-nous dans quelle langue cela doit être fait (comme mq4 ou mq5).
et la liste des instances pour lesquelles vous négociez - est-elle fixe ou différente à chaque fois ?

Je pense que cela devrait être un court collage dans le texte de chaque EA.

(que vous pouvez ensuite déposer comme une procédure si vous le souhaitez) lui permettra

décider des autorisations actuellement existantes pour toute action ...

Je voudrais prendre congé maintenant car il est 5 heures du matin :))

madzx




Merci de votre participation. Mais je ne pense pas que ce soit nécessaire.

Le problème a été résolu comme suit, comme l'a suggéré r772ra:

Ou peut-être comme ceci :

if(NumberOfPositions("EURUSD")==0 && NumberOfPositions()<5)
Et voici une fonction
 
Roman.:

Ne vous égarez pas au milieu de nulle part. Vous pouvez effectuer des transactions d'exp pour des symboles magiques uniques (assignez votre ordre magique à VOS exp sur les symboles sélectionnés). Ensuite, en utilisant l'opérateur conditionnel if - else, vous reliez le filtre par des symboles et des symboles magiques, en utilisant cette fonction de Kim I.V. avec différentes valeurs d'entrée :

Fonction NumberOfOrders().

. C'est tout.




Merci, j'ai trouvé une solution plus simple.
 
Kobalerro:

Merci, une solution plus simple a été trouvée.

OK ! Merci d'avoir publié la solution.
 
Kobalerro:

Merci de votre participation. Mais je pense qu'il n'y a rien de plus.

Le problème a été résolu comme suit, comme l'a suggéré r772ra:

Ou peut-être comme ceci :

Et voici la fonction

OK ! Suivez la tendance et bonne chasse ! !!

madzx
 
Kobalerro:

Merci de votre participation. Mais je pense qu'il n'y a rien de plus.

Le problème a été résolu comme suit, comme l'a suggéré r772ra:

Ou peut-être comme ceci :

Et ici la fonction

Si vous êtes satisfait de cette solution, vous pouvez encore simplifier le code :

if(NumberOfPositions("EURUSD")==0 && OrdersTotal()<5)

Mais c'est probablement mieux de l'écrire comme ça :

if(NumberOfPositions(Symbol())==0 && OrdersTotal()<5)

Si ce n'est pas "enfantin", alors il faut utiliser Magik (tôt ou tard, vous voudrez aussi ouvrir un ordre manuel ou placer un autre EA à proximité) :

if(NumberOfPositions(Symbol(), Magic)==0 && NumberOfPositions("", Magic)<5)

Dans ce cas, tous les EAs doivent avoir le même Magik et n'oubliez pas d'utiliser des filtres sur le Magik et le symbole graphique lors des autres opérations avec la liste des ordres :

    for (int li_pos = OrderTotal() - 1; li_pos >= 0; li_pos--)
    {
        if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderMagicNumber() != Magic) continue;
        if (Symbol() != OrderSymbol()) continue;
        //---- дальнейшие опреации (модификация, удаление и т.д.)
    }

J'espère que vous avez déclaré la magik dans des variables externes, ou comme une constante :

#define Magic  555