Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1343

 
Forallf:
O meio é para mim como um exemplo. Haverá um nível diferente, calculado.

qualquer nível pode ser definido ali, e em qualquer quantidade

 
Andrey Sokolov:

Olá. Você poderia me dizer como calcular o preço da Licitação?

Como calcular um preço Bid que várias posições COMPRAR terão um lucro total zero para pares de moedas, onde a moeda base (primeira) é o dólar, e o valor do pip não é constante e depende dos preços?

Para pares onde o dólar é a moeda cotada (segunda) e o valor do pip é constante, eu derivei esta função,

Isto o ajudará)
 
DanilaMactep:
Muito obrigado por notar e me contar, eu consertei e em 2 anos de testes houve 26 erros 130. Ao mesmo tempo, 115 negócios foram abertos normalmente

se as ordens pendentes forem colocadas a uma distância do preço atual inferior ao STOPLEVEL, haverá um erro 130

é por isso que lhe foi dado este código

ou se você tiver que levá-lo em conta de alguma outra forma

MarketInfo(_Symbol, MODE_STOPLEVEL);
 
Olá! Preciso de código para fechar ordens de mercado após um certo tempo após a abertura (24 horas, 48 horas). O tempo deve ser ajustável.
 
Max330:
Olá! Preciso de código para fechar ordens de mercado após um certo tempo após a abertura (24 horas, 48 horas). O tempo deve ser ajustável.

como este

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:
Isto o ajudará)

Infelizmente, isso não ajudou. Este é geralmente orientado pelos preços de abertura

 
Andrey Sokolov:

Infelizmente, isso não ajudou. Este é geralmente orientado para os preços de abertura.

Então eu não entendo o que você precisa.

Andrey Sokolov:

Como calcular o preço de licitação no qual várias posições COMPRAR têm um lucro total zero

ou seja, o breakeven?

 
MakarFX:

Então eu não entendo o que você quer.

Ou seja, o break-even?

Para calcular um preço de fechamento para uma ou mais ordens unidirecionais (lance para compra) com o qual seu lucro total + economia + comissões == 0.

Este problema ocorre em pares onde a moeda base é o dólar e o valor do ponto muda.

 
Forallf:
O meio é para mim como um exemplo. Haverá outro nível, calculado.

O indicador desenha o meio para qualquer número de linhas de tendência:

#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);
   }
 
Olá a todos. Pergunta: Eu só posso selecionar Just2Trade da lista de corretores. Na busca de outros corretores, nada acontece. Eu tentei reinstalar, limpei todas as pastas e arquivos (inclusive os ocultos). Alguém teve esse problema?
Arquivos anexados:
Razão: