[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 370

 

Encore une fois, bonjour !

J'ai obtenu des réponses de deux bonnes personnes, mais malheureusement aucune des options ne fonctionne.

Je le répète, je suis en train d'écrire un EA et je me suis embrouillé à ce moment-là :

J'ouvre toujours des ordres avec un certain schéma d'ordre et ils peuvent être fermés le jour de l'ouverture ou rester sur le marché pendant 3 jours supplémentaires.

Je n'arrive pas à trouver comment m'enregistrer pour pouvoir trouver un ordre actif depuis 3 jours et le fermer sans fermer un ordre ouvert plus tard.

Le schéma d'ouverture est le même pour toutes les commandes. J'attribue des magies à chacun d'entre eux de la manière suivante : Magie_s =Magie_s+1.

Nous avons besoin que le système trouve et ferme automatiquement cet ordre car nous devons tester le système avec des données historiques.

S'il vous plaît, si quelqu'un sait comment résoudre ce problème - écrivez la réponse. Je vous en serai très reconnaissant :)

 
Boneshapper:

Je l'ai. Merci beaucoup. C'est une bonne option, mais je ne peux pas tester le système avec des données historiques. Je voulais donc le prescrire automatiquement d'une manière ou d'une autre. Si vous avez d'autres suggestions, n'hésitez pas à m'en faire part.
Pour les tests sur l'historique, nous devons déterminer la condition de fermeture. Profit/perte ou durée de vie de la position, par exemple pas plus de 3 jours. Cela peut se faire en modifiant la date d'expiration d'un ordre/position à l'aide de OrderModify.
 
paladin80:
Pour le tester sur l'historique, nous devons déterminer la condition de fermeture de la position. Profit/Perte ou durée de vie de la position, par exemple pas plus de 3 jours. Cela peut se faire en modifiant la date d'expiration de l'ordre/de la position à l'aide de OrderModify.

Oui, il s'avère que nous aurons une condition proche - c'est la durée de vie de la position, très bien, pas plus de 3 jours. J'ai lu des informations sur OrderModify mais je ne les comprends toujours pas. Je vais essayer de le faire dans la soirée. Merci encore pour votre réponse, très rapide :)
 

Désolé, ce n'est pas dans la langue, mais j'ai vraiment besoin de savoir si quelqu'un le sait.

Dans Windows 7, certains fichiers refusent de s'ouvrir. J'appuie sur "Ouvrir avec...", je sélectionne un programme et il n'apparaît PAS dans la liste de sélection des programmes. Quelqu'un sait-il comment supprimer cette restriction ? Je ne l'avais pas sous XP. Ce putain de sept me tue :(

Je pense que le registre a besoin d'être nettoyé. Plus précisément, je ne peux pas double-cliquer sur le format FB2. CoolReader s'exécute et tout va bien. il s'ouvre. double-cliquez pour exécuter le format de fichier que fb2 ne veut pas.

Exécute une recherche de registre Utillitoy JV-16 (toujours utilisé) - eh bien, il a trouvé tant d'entrées de registre qui mentionnent fb2, juste l'horreur - même peur de tuer. Que faire ? Une recherche sur Google n'a rien donné :(

 

Salutations !

Aidez-moi à refaire le code. Le code n'est pas nouveau, mais quelque chose ne fonctionne pas pour moi.

Voici le code :

  *///-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           
  
  }
}
//-----------------------------------------------------------------

J'ai fait de mon mieux pour ouvrir une boucle lorsqu'une transaction négative est atteinte et après avoir atteint une transaction positive, si j'avais une transaction négative, je diminuerais mon solde négatif du profit du dernier ordre fermé, qui est supérieur à zéro. C'est-à-dire, si l'ordre a fermé dans un moins, nous commençons à travailler, si la transaction suivante dans le bénéfice est plus qu'une perte, nous fermons, si sur la transaction suivante ont fermé dans le plus, mais ce plus n'est pas plus grand qu'un moins, sur les ordres précédents, ce plus d'un solde négatif, et l'ordre suivant est comparé avec de nouveaux indicateurs qui est déjà moins, comme nous avant ont fermé dans un moins. C'est pourquoi nous avons un solde positif.

 
drknn:

Désolé, ce n'est pas dans la langue, mais j'ai vraiment besoin de savoir si quelqu'un le sait.

Dans Windows 7, certains fichiers refusent de s'ouvrir. J'appuie sur "Ouvrir avec...", je sélectionne un programme et il n'apparaît PAS dans la liste de sélection des programmes. Quelqu'un sait-il comment supprimer cette restriction ? Je ne l'avais pas sous XP. Ce putain de sept me tue :(

Je pense que le registre a besoin d'être nettoyé. Plus précisément, je ne peux pas double-cliquer sur le format FB2. CoolReader s'exécute et tout va bien. il s'ouvre. double-cliquez pour exécuter le format de fichier que fb2 ne veut pas.

Exécute une recherche de registre Utillitoy JV-16 (toujours utilisé) - eh bien, il a trouvé tant d'entrées de registre qui mentionnent fb2, juste l'horreur - même peur de tuer. Que faire ? Une recherche sur Google n'a rien donné :(


Démarrer - Tous les programmes - Programmes par défaut - Définir les correspondances
 
drknn:

Désolé, ce n'est pas dans la langue, mais j'ai vraiment besoin de savoir si quelqu'un le sait.

Dans Windows 7, certains fichiers refusent de s'ouvrir. J'appuie sur "Ouvrir avec...", je sélectionne un programme et il n'apparaît PAS dans la liste de sélection des programmes. Quelqu'un sait-il comment supprimer cette restriction ? Je ne l'avais pas sous XP. Ce putain de sept me tue :(

Je pense que le registre a besoin d'être nettoyé. Plus précisément, je ne peux pas double-cliquer sur le format FB2. CoolReader s'exécute et tout va bien. il s'ouvre. double-cliquez pour exécuter le format de fichier que fb2 ne veut pas.

Exécute une recherche de registre Utillitoy JV-16 (toujours utilisé) - eh bien, il a trouvé tant d'entrées de registre qui mentionnent fb2, juste l'horreur - même peur de tuer. Que faire ? Une recherche sur Google n'a rien donné :(

http://rhpc.ru/topic/200/
 

Les gars...aide qui sait !!!!


L'essence de la stratégie : Entrée par stochastique (5,14,3) sortie également par stochastique mais avec une autre période (5,3,3). Je ne comprends pas comment faire une sortie par stochastique et non par signal inverse.
J'ai un problème et je n'ai aucune idée de la façon dont il peut être résolu, je vais essayer de vous expliquer.
Donc dans le code que j'ai posté, il y a 2 fonctions
//+------------------------------------------------------------------+
//| prepare array of tickets to close |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0) ;
//----
if (size==0) return ;

int i,type,ticket,closeSize ;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1] ;
// si le type d'ordre n'est pas un ordre de marché, il faut sauter
if (type>OP_SELL) continue ;

if (Reverses) // retourne le type d'ordre de marché
{
if (type==OP_BUY) type=OP_SELL ; else type=OP_BUY ;
}

// ici nous décidons pour chaque ordre ouvert de son sort
// le laisser sur le marché ou l'ajouter au tableau à la clôture
if (type==OP_BUY)
{
//
// code permettant de laisser l'achat

// à titre d'exemple
if (signal==OP_BUY) continue ;
}

if (type==OP_SELL)
{
//
//code permettant de continuer à vendre

//à titre d'exemple
if (signal==OP_SELL) continue ;
}


closeSize=ArrayRange(ticketsClose,0) ;
ArrayResize(ticketsClose,closeSize+1) ;
ArrayResize(ticketsClose,closeSize+1) ;
ticketsClose[closeSize][0] = arrayTickets[i][0] ; // ticket #
ticketsClose[closeSize][1] = arrayTickets[i][1] // type d'ordre

// ici nous spécifions le nombre de lots à clôturer
lots[closeSize] = arrayTickets[i][2] ; // volume à clôturer
// il est possible de clôturer partiellement, alors la ligne ci-dessus doit être réécrite
}
//----
return ;
}

//+------------------------------------------------------------------+
//| Closes orders with specified tickets |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0) ;
if (size==0) return ;

int ticket,type ;
double lots ;
bool res ;

int total=OrdersTotal() ;

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0] ;
type = ticketsArray[i][1] ;
lots = lotsArray[i] ;
RefreshRates() ; // juste au cas où l'environnement de marché est mis à jour

// bloc de clôture d'achat
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange) ;
if ( !res)
{
Print("Failed to close order to buy #",ticket," ! Error #",GetLastError()) ;
// gestion d'autres erreurs, à écrire soi-même
}
}

// bloc de clôture des ventes
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange) ;
if (!res)
{
Print("Failed to close sell order #",ticket," ! Erreur #",GetLastError()) ;
// autre gestion des erreurs, à écrire soi-même
}
}

}
//----
return ;
}

La fonction void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) doit passer une condition pour décider si l'ordre doit être fermé ou non...
J'ai essayé de mettre des conditions mais rien ne fonctionne....
Quelqu'un peut-il regarder s'il y a une erreur dans ces fonctions ou si je me suis trompé ? ....
Dossiers :
osc_test.mq4  37 kb
 
L'offre peut-elle être égale à 0 dans un flux de tic-tac (parfois) pendant une session de négociation?
 
tara:

Démarrer - Tous les programmes - Programmes par défaut - Définir les mappings

Cette opération conduit à une fenêtre de sélection de programmes. Spécifier un programme et il n'y apparaît pas.