Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1343

 
Forallf:
Середина мне для примера. Будет другой, расчетный уровень.

там любой уровень можно установить, и в любом количестве

 
Andrey Sokolov:

Здравствуйте. Подскажите, пожалста.

Как рассчитать цену Bid при которой несколько позиций BUY будут иметь общий нулевой профит для валютных пар, где базовая (первая) валюта доллар, и стоимость пункта не постоянна и зависит от цен?

Для пар, где доллар котируемая (вторая) валюта и постоянная стоимость пункта вывел такую функцию, 

Это тебе поможет)
 
DanilaMactep:
Огромное спасибо, что заметили и подсказали- поправил это дело и за 2х летний тест было ошибок 130 26 штук. При этом 115 сделок нормально открылись

если отложенные ордера выставляются на расстоянии от текущей цены меньше чем STOPLEVEL, то будет ошибка 130

поэтому тебе дали этот код

или как-то по другому надо учитывать

MarketInfo(_Symbol, MODE_STOPLEVEL);
 
 
Здравствуйте! Нужен код для закрытия рыночных ордеров через определённое время после открытия (24 часа, 48 час). Время должно быть регулируемым.
 
Max330:
Здравствуйте! Нужен код для закрытия рыночных ордеров через определённое время после открытия (24 часа, 48 час). Время должно быть регулируемым.

примерно так

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:
Это тебе поможет)

к сожалению не помогло. Этот вообще ориентируется на цены отрытия

 
Andrey Sokolov:

к сожалению не помогло. Этот вообще ориентируется на цены отрытия

Тогда я не понял что тебе надо.

Andrey Sokolov:

Как рассчитать цену Bid при которой несколько позиций BUY будут иметь общий нулевой профит

т.е. безубыток?

 
MakarFX:

Тогда я не понял что тебе надо.

т.е. безубыток?

рассчитать цену закрытия для одного или нескольких однонаправленных ордеров (bid для buy) при котором их общий профит+своп+коммиссии будут == 0. 

Эта проблема возникла для пар где базовая валюта доллар, и стоимость пункта меняется.

 
Forallf:
Середина мне для примера. Будет другой, расчетный уровень.

Индикатор чертит середину для любого количества трендовых линий:

#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);
   }
 
Всем привет. Такой вопрос: в списке брокеров выбрать можно только Just2Trade. При поиске других брокеров ничего не происходит. Пробовал переустанавливать, все папки и файлы чистил (в том числе и скрытые). Кто-нибудь с такой проблемой сталкивался?
Файлы:
Причина обращения: