Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1343

 
Forallf:
Celui du milieu est pour moi, à titre d'exemple. Il y aura un niveau différent, calculé.

tout niveau peut y être fixé, et en toute quantité

 
Andrey Sokolov:

Bonjour. Pourriez-vous me dire comment calculer le prix de l'offre ?

Comment calculer un prix acheteur auquel plusieurs positions d'achat auront un profit total nul pour les paires de devises, où la devise de base (première devise) est le dollar, et la valeur du pip n'est pas constante et dépend des prix ?

Pour les paires où le dollar est la (deuxième) devise cotée et où la valeur du pip est constante, j'ai dérivé cette fonction,

Cela vous aidera)
 
DanilaMactep:
Merci beaucoup de l'avoir remarqué et de me l'avoir dit, je l'ai corrigé et en 2 ans de tests, il y a eu 26 erreurs 130. Au même moment, 115 transactions ont été ouvertes normalement

si les ordres en attente sont placés à une distance du prix actuel inférieure au STOPLEVEL, il y aura une erreur 130

c'est pourquoi on vous a donné ce code

ou si vous devez le prendre en compte d'une autre manière

MarketInfo(_Symbol, MODE_STOPLEVEL);
 
Bonjour, J'ai besoin d'un code pour fermer les ordres de marché après un certain temps après l'ouverture (24 heures, 48 heures). Le temps doit être réglable.
 
Max330:
Bonjour, J'ai besoin d'un code pour fermer les ordres de marché après un certain temps après l'ouverture (24 heures, 48 heures). Le temps doit être réglable.

comme ceci

for(int pos=OrdersTotal()-1;pos>=0;pos--)
    if(OrderSelect(pos,SELECT_BY_POS)==true)
       if(OrderSymbol()==_Symbol)
         if(TimeCurrent()-(определенное время в секундах) >= OrderOpenTime()) 
            OrderClose(order_id,1,Ask,3,Red);
 
MakarFX:
Cela vous aidera)

Malheureusement, cela n'a pas aidé. Celui-ci est généralement guidé par les prix d'ouverture

 
Andrey Sokolov:

Malheureusement, cela n'a pas aidé. Celle-ci est généralement orientée vers les prix d'ouverture.

Alors je ne comprends pas ce dont vous avez besoin.

Andrey Sokolov:

Comment calculer le prix d'achat auquel plusieurs positions d'achat ont un profit total nul ?

c'est-à-dire le seuil de rentabilité ?

 
MakarFX:

Alors je ne comprends pas ce que vous voulez.

C'est-à-dire le seuil de rentabilité ?

Calculer un prix de clôture pour un ou plusieurs ordres unidirectionnels (bid pour buy) auquel le total de leur profit+épargne+commissions == 0.

Ce problème se produit dans les paires où la devise de base est le dollar et où la valeur du point change.

 
Forallf:
Le milieu est pour moi à titre d'exemple. Il y aura un autre niveau, calculé.

L'indicateur dessine le milieu d'un nombre quelconque de lignes de tendance:

#property version   "1.00"
#property strict
#property indicator_chart_window

string symbol;
ENUM_TIMEFRAMES frame;
int digits;

long ChartId;
int Window;

datetime time1, time2;
double price;

int OnInit()
   {
   //идентификатор графика и номер окна индикатора
   ChartId=ChartID();
   Window=0;
   symbol=Symbol();
   frame=(ENUM_TIMEFRAMES)Period();
   digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   ChartSetInteger(ChartId,CHART_EVENT_OBJECT_CREATE,true);
   return(INIT_SUCCEEDED);
   }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {

   return(rates_total);
   }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
   {
   if((id==CHARTEVENT_OBJECT_CREATE || id==CHARTEVENT_OBJECT_DRAG) && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_TREND && StringFind(sparam,"Middle")==-1)
      {
      price=(ObjectGet(sparam,OBJPROP_PRICE1)+ObjectGet(sparam,OBJPROP_PRICE2))/2;
      time1=GetPointTimeOnStraight((datetime)ObjectGet(sparam,OBJPROP_TIME1),ObjectGet(sparam,OBJPROP_PRICE1),(datetime)ObjectGet(sparam,OBJPROP_TIME2),ObjectGet(sparam,OBJPROP_PRICE2),price,symbol,frame);
      time2=time1+PeriodSeconds(frame)*10;
      RedrawLine(ChartId,Window,sparam+"_Middle",time1,price,time2,price,(color)ObjectGet(sparam,OBJPROP_COLOR),(int)ObjectGet(sparam,OBJPROP_WIDTH),(string)ObjectGet(sparam,OBJPROP_TOOLTIP),digits);
      }
   }
      
//находит дату точки (координату X) на прямой, на заданную цену (координата Y)
datetime GetPointTimeOnStraight(datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, double ePrice3, string eSymbol, int eTimeFrame)
   {
   if(ePrice2-ePrice1==0) return(0.0);
   //индекс бара соответствующий заданному времени, возможно задавать будующее время
   int eIndex1=(eTime1>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime1)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime1);
   int eIndex2=(eTime2>iTime(eSymbol,eTimeFrame,0))?(int)((iTime(eSymbol,eTimeFrame,0)-eTime2)/PeriodSeconds(eTimeFrame)):iBarShift(eSymbol,eTimeFrame,eTime2);
   int eIndex3=eIndex1+(int)((eIndex2-eIndex1)*(ePrice3-ePrice1)/(ePrice2-ePrice1));
   if(eIndex3>=0)
      {
      return(iTime(eSymbol,eTimeFrame,eIndex3));
      }
   else
      {
      return(iTime(eSymbol,eTimeFrame,0)-eIndex3*PeriodSeconds(eTimeFrame));
      }
   }

//перерисовывает линию по новым координатам, если её нет, то создаёт
void RedrawLine(long eChartId, int eWindow, string eName, datetime eTime1, double ePrice1, datetime eTime2, double ePrice2, color eColor, int eWidth, string eTooltip, int eDigits)
   {
   if(ObjectFind(eChartId,eName)==-1)
      {
      if(!ObjectCreate(eChartId,eName,OBJ_TREND,eWindow,0,0)) return;
      ObjectSetInteger(eChartId,eName,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(eChartId,eName,OBJPROP_WIDTH,eWidth);
      ObjectSetInteger(eChartId,eName,OBJPROP_BACK,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_SELECTED,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_RAY_RIGHT,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_HIDDEN,true);
      }
   if(ObjectFind(eChartId,eName)==-1) return;   
   if(ObjectGetInteger(eChartId,eName,OBJPROP_TIME)!=eTime1) ObjectSetInteger(eChartId,eName,OBJPROP_TIME,eTime1);
   if(NormalizeDouble(ObjectGetDouble(eChartId,eName,OBJPROP_PRICE)-ePrice1,eDigits)!=0) ObjectSetDouble(eChartId,eName,OBJPROP_PRICE,ePrice1);
   if(ObjectGetInteger(eChartId,eName,OBJPROP_TIME,1)!=eTime2) ObjectSetInteger(eChartId,eName,OBJPROP_TIME,1,eTime2);
   if(NormalizeDouble(ObjectGetDouble(eChartId,eName,OBJPROP_PRICE,1)-ePrice2,eDigits)!=0) ObjectSetDouble(eChartId,eName,OBJPROP_PRICE,1,ePrice2);
   if(ObjectGetInteger(eChartId,eName,OBJPROP_COLOR)!=eColor) ObjectSetInteger(eChartId,eName,OBJPROP_COLOR,eColor);
   if(ObjectGetString(eChartId,eName,OBJPROP_TOOLTIP)!=eTooltip) ObjectSetString(eChartId,eName,OBJPROP_TOOLTIP,eTooltip);
   }
 
Bonjour à tous. Question : Je ne peux sélectionner que Just2Trade dans la liste des courtiers. Lorsque vous recherchez d'autres courtiers, rien ne se passe. J'ai essayé de réinstaller, de supprimer tous les dossiers et fichiers (y compris les fichiers cachés). Quelqu'un a-t-il rencontré un tel problème ?
Dossiers :