Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1037

 
Tema97:

que dois-je faire maintenant ? j'ai une stratégie basée sur les canaux - existe-t-il une alternative de remplacement ?

Bien sûr qu'il y en a. Calculez les valeurs, enregistrez-les dans un tableau ou une structure, et utilisez-les pour votre EA. Et vous pouvez également dessiner les objets à partir de là - les valeurs sont disponibles.
 
Tema97:

que dois-je faire maintenant ? j'ai une stratégie basée sur les canaux - existe-t-il une alternative de remplacement ?

Qu'y a-t-il à construire ? Interroger l'indicateur via iCustom.
Pour la vente, vous pouvez intégrer avec#resource
 
Je veux mettre en œuvre ce qui suit
la possibilité d'ajouter différentes échéances à UNE feuille (dans différentes fenêtres mais sur une seule feuille)
Veuillez me conseiller sur les endroits où aller et où creuser). Est-ce possible via mql ou WInApi ?
peut-être y a-t-il des exemples de l'article que je n'ai pas pu trouver(
 
kocunyc89:

S'il vous plaît, aidez-moi à réparer cela ! Cela donne l'erreur 'Void' - déclaration sans type 36 4 et où réarranger ou écrire return ?
//--------------------------------------------------------------------
Void OnTick()
{

void s'écrit avec une petite minuscule au lieu d'une majuscule. Regarde, c'est une couleur différente. Mettez le curseur sur ce mot et appuyez sur F1 - cela aide souvent.

Tant de messages d'erreur apparaissent après l'avoir réparé... J'ai réparé les messages d'erreur, mais vérifiez la logique vous-même.

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

void s'écrit avec une petite minuscule et non avec une grande majuscule. Regarde si c'est une couleur différente. Mettez le curseur sur ce mot et appuyez sur F1 - cela aide souvent.

Après l'avoir réparé, de nombreux messages d'erreur apparaissent... J'ai réparé les messages d'erreur, mais vérifiez la logique vous-même.


Merci beaucoup, gentilhomme !

 
Bonjour, messieurs les commerçants ! J'ai écrit un robot de signalisation basé sur le code que j'ai posté ci-dessus. Le robot génère des signaux pour les options de manière presque exacte, mais avec un décalage de deux barres. Que dois-je changer dans le code pour produire les mêmes résultats mais deux barres plus tôt ? Ou est-ce impossible ? Merci.
 
Pouvez-vous me conseiller - j'ai un indicateur personnalisé - Channel - je dois retourner la valeur de la limite supérieure du canal - comment puis-je le faire ?
 
artmedia70:

La variable int contient exactement le nombre de secondes depuis 1970, tandis que la variable datetime contient la date.

Si vous avez besoin d'une certaine barre dans l'historique, peu importe comment vous la spécifiez - par date ou par nombre de secondes, dans tous les cas, la variable indiquera l'heure d'ouverture de cette barre particulière, indépendamment de l'arrivée de nouveaux ticks et de l'ouverture de nouvelles barres.

Merci beaucoup, mais il y a un autre problème. J'ai un indicateur qui a une fonction stat, cette fonction devrait être utilisée SEULEMENT quand un nouveau signal arrive, mais ce problème compte sur chaque barre, j'ai tout fait et normalisé le double en comparaison, donc je suppose que je suis foutu. Cela a tué toute la soirée, quelqu'un peut-il expliquer ce qui ne va pas ? ? ??? Indicateur dans l'atache dans la ligne 193 est un appel de fonction avec une condition, mais la condition n'est pas remplie et le Furction stat est calculé à l'arrivée de chaque barre, je suis déjà ennuyé pour trouver l'erreur, les gars aidez s'il vous plaît aidez !!!!! Merci d'avance....
Dossiers :
 

J'ai découvert seulement maintenant que la fonction stat est recalculée si l'indicateur est appelé à partir d'un autre indicateur, lorsque les deux sont sur le graphique. C'est-à-dire qu'il est calculé une fois pour lui-même et la seconde fois pour l'indicateur qui l'appelle. Qu'est-ce que c'est ?

 

L'image montre ce qui suit. Le commentaire en haut est la valeur du tampon dans l'indicateur principal dans lequel le calcul a lieu, et l'impression (en bas) est le même tampon, mais seulement appelé dans un autre indicateur et sorti dans l'impression. La différence est significative, MAIS POURQUOI !!!!!

le premier fichier est le fichier principal, le second appelle le tampon du premier....

Dossiers :
Raison: