Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
А если полностью удалить лимит баров, какие это строчки?
Ничего тебе исправлять не надо. Выхватывая по одной строке из кода я насоветовал тебе не совсем правильно. Там оказалась своя логика и не совсем-уж неверная. Главное что работает.
В общем первое моё замечание, видимо, самое правильное. Были проблемы в МТ, сейчас исправлены. В МТ билд 842 твой индикатор работает абсолютно без проблем.
Обновись открыв счёт в MetaQuotes-Demo
 

_SERG_

Активный участник
Леш, тыркни в личку свой скайп или мыло, я кино про твою сову посмотрел.
_https://www.mql5.com/ru/market/product/7123

есть что обсудить. У меня свои глюки, но результат может быть интересен.


P.S
А на нЭт, и суда нЭт.
а по днюхам, в один день, месяц в месяц, но есть отличия.
 
Последнее редактирование модератором:

vladradon

Программист
Сначала подумал, что объявлено мало буферов indicator_buffers, но не в этом, видимо, проблемка. Перелопатил уже весь инет в поисках ответа, а программист, который мне писал этого индюка, куда-то пропал. Мне, как человеку не знакомому с программированием, проблематично найти ответ, но интересно ж:D
//+------------------------------------------------------------------+
//| MACDRetracement.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property version "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots 3
#property indicator_color1 clrYellow
#property indicator_color2 clrYellow
#property indicator_color3 clrRed

input int macdFastEMA = 9;
input int macdSlowEMA = 17;
input int macdSignalPeriod = 9;
input ENUM_APPLIED_PRICE macdPrice = PRICE_CLOSE;
input bool useLevelFilter = true;
input double upperLevel = 0.001;
input double lowerLevel = -0.001;
input bool showFridaySignals = false;
input int slLevel = 100;
input int tpLevel = 200;
//input bool showSignalsMACD0Cross = false;
input int barLimit = 1000;

double signal[];
double macdHistogram[];
double macdSignal[];

int OnInit()
{
SetIndexBuffer(0,signal); SetIndexLabel(0,"Signal");
SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,108);
SetIndexBuffer(1,macdHistogram); SetIndexLabel(1,"MACD");
SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
SetIndexBuffer(2,macdSignal); SetIndexLabel(2,"MACD Signal");
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
IndicatorDigits(6);

if(useLevelFilter)
{
SetLevelValue(0,0);
SetLevelValue(1,upperLevel);
SetLevelValue(2,lowerLevel);
SetLevelStyle(STYLE_DOT,1);
}

return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
string name;
for(int i=ObjectsTotal(0,0);i>=0;i--)
{
name = ObjectName(0,i,0);
if(StringFind(name,"Arrow",0)>=0) ObjectDelete(0,name);
if(StringFind(name,"Price",0)>=0) ObjectDelete(0,name);
if(StringFind(name,"SL",0)>=0) ObjectDelete(0,name);
if(StringFind(name,"TP",0)>=0) ObjectDelete(0,name);
}
}

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[])
{
int limit;
int ind; double macd;
string obj_name;
bool fsignal;

if(prev_calculated == 0) limit = barLimit; else limit = rates_total-prev_calculated+1;
if(prev_calculated == rates_total) return(rates_total);

for(int i=limit;i>=0;i--)
{
macdHistogram = iMACD(_Symbol,_Period,macdFastEMA,macdSlowEMA,macdSignalPeriod,macdPrice,MODE_MAIN,i);
macdSignal = iMACD(_Symbol,_Period,macdFastEMA,macdSlowEMA,macdSignalPeriod,macdPrice,MODE_SIGNAL,i);

//--- Find last SELL signal
if(macdHistogram<0 && macdSignal<0)
{
if(macdHistogram>macdSignal && macdHistogram[i+1]<macdSignal[i+1])
{
ind = 0;
for(int j=i;j<limit;j++)
{
if(macdHistogram[j]<macdHistogram[j+1])
{
if((!useLevelFilter || (useLevelFilter && macdHistogram[j]<lowerLevel)) &&
(showFridaySignals || (!showFridaySignals && TimeDayOfWeek(Time[j])!=5)))
{
ind = j; macd = macdHistogram[j];
}
break;
}
}
}

if(ind>0 && signal[ind]==EMPTY_VALUE)
{
signal[ind]=macd;
obj_name = "ArrowDN: "+TimeToString(Time[ind]);
//SetArrow(0,obj_name,Time[ind],Low[ind],clrYellow,1,108);
ObjectCreate(0,obj_name,OBJ_ARROW_LEFT_PRICE,0,Time[ind],Low[ind]);
ObjectSetInteger(0,obj_name,OBJPROP_COLOR,clrGray);
}
}

//--- Find last BUY signal
if(macdHistogram>0 && macdSignal>0)
{
if(macdHistogram<macdSignal && macdHistogram[i+1]>macdSignal[i+1])
{
ind = 0;
for(int j=i;j<limit;j++)
{
if(macdHistogram[j]>macdHistogram[j+1])
{
if((!useLevelFilter || (useLevelFilter && macdHistogram[j]>upperLevel)) &&
(showFridaySignals || (!showFridaySignals && TimeDayOfWeek(Time[j])!=5)))
{
ind = j; macd = macdHistogram[j];
}
break;
}
}
}

if(ind>0 && signal[ind]==EMPTY_VALUE)
{
signal[ind]=macd;
obj_name = "ArrowUP: "+TimeToString(Time[ind]);
//SetArrow(0,obj_name,Time[ind],High[ind],clrYellow,1,108);
ObjectCreate(0,obj_name,OBJ_ARROW_LEFT_PRICE,0,Time[ind],High[ind]);
ObjectSetInteger(0,obj_name,OBJPROP_COLOR,clrGray);
}
}

for(int j=i;j<limit;j++)
{
if(signal[j]!=EMPTY_VALUE)
{
if(signal[j]<0)
{
fsignal=false;
for(int k=j;k>=i;k--)
{
if(macdHistogram[k]>0)
{
for(int l=j;l>=i;l--)
{
obj_name = "Price: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
obj_name = "SL: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
obj_name = "TP: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
}
break;
}
if(!fsignal || (fsignal && Low[k]>=Low[j]))
{
obj_name = "Price: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],Low[j],clrGray,1,4);
obj_name = "SL: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],Low[j]+slLevel*_Point,clrRed,1,4);
obj_name = "TP: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],Low[j]-tpLevel*_Point,clrGreen,1,4);

if(!fsignal && macdHistogram[k]>macdSignal[k]) fsignal=true;
}
else break;
}
}
if(signal[j]>0)
{
fsignal=false;
for(int k=j;k>=i;k--)
{
if(macdHistogram[k]<0)
{
for(int l=j;l>=i;l--)
{
obj_name = "Price: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
obj_name = "SL: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
obj_name = "TP: "+TimeToString(Time[l]);
ObjectDelete(0,obj_name);
}
break;
}
if(!fsignal || (fsignal && High[k]<=High[j]))
{
obj_name = "Price: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],High[j],clrGray,1,4);
obj_name = "SL: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],High[j]-slLevel*_Point,clrRed,1,4);
obj_name = "TP: "+TimeToString(Time[k]);
SetArrow(0,obj_name,Time[k],High[j]+tpLevel*_Point,clrGreen,1,4);

if(!fsignal && macdHistogram[k]<macdSignal[k]) fsignal=true;
}
else break;
}
}

break;
}
}
}

return(rates_total);
}
//+------------------------------------------------------------------+
void SetArrow(long chart, string name, datetime t, double p, int c, int w, uchar ch)//, ENUM_ARROW_ANCHOR a)
{
if(ObjectCreate(chart,name,OBJ_ARROW,0,t,p))
{
ObjectSetInteger(chart,name,OBJPROP_ARROWCODE,ch);
ObjectSetInteger(chart,name,OBJPROP_COLOR,c);
ObjectSetInteger(chart,name,OBJPROP_WIDTH,w);
//ObjectSetInteger(chart,name,OBJPROP_ANCHOR,a);
}
}



Приветствую!
Насколько я понял из сообщения от Ugar, объявлен массив на 5 значений недробных чисел, но следующей строкой идет запись в 5-ю ячейку, которой не существует, т.к. при объявлении количества ячеек мы прописываем общее количество в данном случае 5, но далее отсчет по всем функциям идет с 0 и 5-я ячейка будет для всех функций, которые работают с массивом, под номером 4!
int Arr[5];
Arr[4]=23; - это будет правильно.
Но в индикаторах (в основном) не обязательно задавать изначально объем массива. Т.е.
int Arr[5]; можно задать как int Arr[]; и размер массива (если нужно) регулирвать в процессе торгов доп функциями, но только с учетом того, что в безразмерном массиве незаполненные ячейки будут нулевыми и в коде сова или индикатора нужно обязательно учитывать объем заложенных данных в массив, не превышая их количество, если оно может меняться в процессе торгов.
 
Последнее редактирование:

planod

Интересующийся
Друзья, всем привет. Помогите, пожалуйста, а то навык программирования совсем потерял. Суть: из истории ордеров надо выбрать последний закрытый и определить его тип. Заранее спасибо.
 

Ugar

Гуру форума
Как то так.
Код:
int total, i, LastHistOrderType=-1;    
datetime OrdTime, LastOrdTime;    
total=OrdersHistoryTotal();    
for(i=total-1; i>=0; i--)
       {
       ResetLastError();
       if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
          {
          Print("Исторический ордер не выбран, ошибка = ",GetLastError());
          continue;
          }
       OrdTime=OrderCloseTime();
       if(LastOrdTime<OrdTime)
          {
          LastOrdTime=OrdTime;
          LastHistOrderType=OrderType();
          }
       }
Этот код ищет последний закрытый ордер в истории, его тип будет в переменной LastHistOrderType 0-Buy, 1-Sell, -1 если последний закрытый ордер не найден.
Здесь нет фильтрации ордеров по символу и маджику, при желании добавь.
 

vlados73

Прохожий
помогите разобраться

Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?
 

ansol

Местный знаток
Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?

Хочешь сам разобраться?
Прога вытаскивает файл с Инетернета на диск(правда *.csv, но не суть), сохраняет, распиливает на строки и выводит в качестве индикатора.
Это индикатор новостей на графике по сути, до сих пор работает, хотя и старенький уже.
Исходный код во вложении(с комментариями, все понятно вроде бы)
 

Вложения

  • News.mq4
    26,1 КБ · Просмотры: 29
Последнее редактирование:

vlad_123

Местный знаток
Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?
Пользуй на здоровье ;)
Код:
string getURLAsString(string inURL, string inReferrer = NULL, string inCoockies = NULL) {
   int myBuffer[8192], myNumOfReadBytes[1];
   string myRetVal;
   
   Print("Retrieving URL: " + inURL);
   
   string myResponseHeaders;
   int myTimeout = 10000, myDataSize = 0;
   char myData[], myResponse[];
   
   int myRetCode = WebRequest("GET", inURL, inCoockies, inReferrer, myTimeout, myData, myDataSize, myResponse, myResponseHeaders);
   if (myRetCode == -1) {
      int myLastError = GetLastError();
      if (myLastError == ERR_FUNCTION_NOT_CONFIRMED) {
         int myPos1 = StringFind(inURL, "//");
         if (myPos1 > -1) {
            string myURLToShow = inURL;
            int myPos2 = StringFind(inURL, "/", myPos1 + 2);
            if (myPos2 > -1) myURLToShow = StringSubstr(inURL, 0, myPos2+1);
            Alert("Function is NOT confirmed: ", myLastError, " WebRequest(GET, ", myURLToShow, ")");
         } else Alert("Function is NOT confirmed: ", myLastError, " WebRequest(GET, StrangeURL)");
      }
      else Print("Error N", myLastError, " in WebRequest(GET, ", inURL, ")");
   } else Print("Got HTTP response: ", myRetCode);
   myRetVal = CharArrayToString(myResponse);
   return(myRetVal);
}
string myStr = getURLAsString("http://www.google.com");
int myFileH = FileOpen("GoogleHomePage.txt", FILE_TXT|FILE_WRITE);
FileWrite(myFileH, myStr);
FileClose(myFileH);
URL нужно добавить в список разрешенных - в терминале выбрать "Сервис - Настройки - Советники", там - поставить чек-бокс "Разрешить WebRequest..." и в список добавить URL.
 

vlad_123

Местный знаток
Функця стывания URL будет работать без wininet.dll?
Это стандартная dll'а винды, чем она вас обидела?
А касабельно вопроса - чессгря даже и не знаю, через какое API работает используемая функция, но в советнике дополнительно подключать никаких библиотек не нужно.
Там используется функция WebRequest _http://docs.mql4.com/ru/common/webrequest
 

vlados73

Прохожий
Это стандартная dll'а винды, чем она вас обидела?
А касабельно вопроса - чессгря даже и не знаю, через какое API работает используемая функция, но в советнике дополнительно подключать никаких библиотек не нужно.
Там используется функция WebRequest _http://docs.mql4.com/ru/common/webrequest

спасибо влад попробую разобраться.
 

Vanek_V

Прохожий
НУЖНА ПОМОЩЬ!!!

Всем доброго времени суток.
Пытаюсь освоить MQL4 накачал кучу материала, решил попробовать на примерах. Однако при попытке повторить примеры в MetaEditor 4 при компиляции возникает большое количество предупреждений (хотя повторяю все досконально, как в видео с уроками). Подскажите пожалуйста зависит ли это от версии MetaEditor 4 (у меня установлена MetaEditor version 5.0 (хотя MetaTrader 4), build 1154 11 Jun 2015 или нет
и как это можно подправить?
Если кто-то знает приемлемый самоучитель (желательно на примерах) буду очень признателен за ссылку (или информацию о нем)


САМ ПРИМЕР
//+------------------------------------------------------------------+
//| Test 1.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| _https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "_https://www.mql5.com"
#property version "1.00"
#property strict

extern int BarCount = 10;
extern int Magic = 123;
extern int HourStart = 10;
extern int HourEnd = 23;
extern double Lots = 0.1;
extern int TakeProfit = 30;
extern int StopLoss = 20;
extern int Slippage = 5;
extern string comment = "TEST2";

double minprice, maxprice, SL, TP;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+
int start()
{
if (HourEnd == TimeHour(TimeCurrent()))
{
DeleteOrders();
}
minprice = NormalizeDouble(GetMinPrice(), Digits);
maxprice = NormalizeDouble(GetMaxPrice(), Digits);

if (HourStart == TimeHour(TimeCurrent()) && CountBuyLimit() == 0 && CountSellLimit() == 0)
{
SL = NormalizeDouble(minprice - StopLoss*Point, Digits);
TP = NormalizeDouble(minprice + TakeProfit*Point, Digits);
OrderSend(Symbol(), OP_BUYLIMIT, Lots, minprice, Slippage, SL, TP, comment, Magic, 0, Blue);

SL = NormalizeDouble(maxprice + StopLoss*Point, Digits);
TP = NormalizeDouble(maxprice - TakeProfit*Point, Digits);
OrderSend(Symbol(), OP_SELLLIMIT, Lots, maxprice, Slippage, SL, TP, comment, Magic, 0, Red);
}

return(0);
}
//+------------------------------------------------------------------+
double GetMinPrice()
{
double dLow = 1000000,
dPrice;

for(int i=1; i<= BarCount; i++)
{
dPrice = iLow(Symbol(), PERIOD_H1, i);
if (dPrice < dLow)
dLow = dPrice;
}

return(dLow);
}
//+------------------------------------------------------------------+
double GetMaxPrice()
{
double dHigh = 0,
dPrice;

for(int i=1; i<= BarCount; i++)
{
dPrice = iHigh(Symbol(), PERIOD_H1, i);
if (dPrice > dHigh)
dHigh = dPrice;
}

return(dHigh);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
count ++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
count ++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuyLimit()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUYLIMIT)
count ++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSellLimit()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >=0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELLLIMIT)
count ++;
}
}
return(count);
}
//+------------------------------------------------------------------+
void DeleteOrders()
{
for(int trade=OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
OrderDelete(OrderTicket(), Black);
}
}
}
//+------------------------------------------------------------------+





ОШИБКИ И ПРЕДУПРЕЖДЕНИЯ

'Test 1.mq4' Test 1.mq4 1 1
return value of 'OrderSend' should be checked Test 1.mq4 66 7
return value of 'OrderSend' should be checked Test 1.mq4 70 7
return value of 'OrderSelect' should be checked Test 1.mq4 111 7
return value of 'OrderSelect' should be checked Test 1.mq4 126 7
return value of 'OrderSelect' should be checked Test 1.mq4 141 7
return value of 'OrderSelect' should be checked Test 1.mq4 156 7
return value of 'OrderSelect' should be checked Test 1.mq4 170 4
return value of 'OrderDelete' should be checked Test 1.mq4 173 7
0 error(s), 8 warning(s) 1 9
 
Последнее редактирование модератором:

CrazyDoc

Новичок форума
Читай в описании OrderSelect и OrderSend - функции возвращают результаты, их желательно проверять(если удачно - исполнят советник дальше, если нет - узнать в чем причина и попытаться исправить). Самые простые варианты -
if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))
...
else ...
это значит что если выражение в скобках удалось(или функция вернула true) - выполнить первое условие(после if), если нет - второе(после else).
Если функции возвращают больше вариантов чем ложь\верно тогда
n=OrderSend(Symbol(), OP_SELLLIMIT, Lots, maxprice, Slippage, SL, TP, comment, Magic, 0, Red);
проверка n
Советник работает. Компилятор выдал только ПРЕДУПРЕЖДЕНИЯ, что значит - с большой долей вероятности он работать будет нестабильно.
 
Последнее редактирование:

vlad_123

Местный знаток
что значит - с большой долей вероятности он работать будет нестабильно.
Не вводите в заблуждение!
Тот же OrderSelect прекрасно работает без проверки возвращаемого значения в 99% случаев.
А так - да, лучше проводить проверку.
 

vlad_123

Местный знаток
это 99% реальных, расчетных 50% либо true, либо false
Тогда потрудитесь подкрепить свои расчеты статистикой - предоставьте советника, который в цикле селектает ордер(а) и выдает количество возвращенных true/false.
Складывается ощущение, что наличие двух вариантов события делает их (по вашему мнению) равновероятными, что с точки зрения статистики абсолютно неправильно.
 
Последнее редактирование:

CrazyDoc

Новичок форума
Уел. Харош флудить. Новичкам это не поможет, старики и так все поняли.
 

gush

бродяга
привет всем, подскажите, как правильно изменить код совы, чтобы в условиях открытия поз на тайме D1 поменять на М15.. простая замена D1 на M15 не прокатывает...
PHP:
//======================= условие на  ORDER BUY ===============================
 
if  (Proverka1 >= Porog && Proverka2 >= Porog && O<H)     
  {
    ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,H+Spred+Spred,0,H-SL+Spred+Spred,H+TP+Spred+Spred,NULL,MagicNumber,iTime( Symbol(), PERIOD_D1, 0 ) + 86400);
    if (ticket==-1)
      {
        err=GetLastError();
        Print("error(",err,")");
      }
  }
else 
  {
    Comment("\n","Не возможно выставить OP_BUYSTOP",
            "\n","Цена не соответствует условию входа в рынок");
  }     
 
   //================================ условие на  ORDER SELL ==================== 
if  (Proverka1 >= Porog && Proverka2 >= Porog && O>L)  
  {   
    ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,L-Spred,0,L-Spred+SL,L-Spred-TP,NULL,MagicNumber,iTime( Symbol(), PERIOD_D1, 0 ) + 86400);
    if (ticket==-1)
      {
         err=GetLastError();
         Print("error(",err,")");
      }
  }
else 
  {
    Comment("\n","Не возможно выставить OP_SELLSTOP",
            "\n","Цена не соответствует условию входа в рынок");
  }     
}
//+------------------------------------------------------------------+
 

gush

бродяга
привет всем, подскажите, как правильно изменить код совы, чтобы в условиях открытия поз на тайме D1 поменять на М15.. простая замена D1 на M15 не прокатывает...
PHP:
//======================= условие на  ORDER BUY ===============================
 
if  (Proverka1 >= Porog && Proverka2 >= Porog && O<H)     
  {
    ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,H+Spred+Spred,0,H-SL+Spred+Spred,H+TP+Spred+Spred,NULL,MagicNumber,iTime( Symbol(), PERIOD_D1, 0 ) + 86400);
    if (ticket==-1)
      {
        err=GetLastError();
        Print("error(",err,")");
      }
  }
else 
  {
    Comment("\n","Не возможно выставить OP_BUYSTOP",
            "\n","Цена не соответствует условию входа в рынок");
  }     
 
   //================================ условие на  ORDER SELL ==================== 
if  (Proverka1 >= Porog && Proverka2 >= Porog && O>L)  
  {   
    ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,L-Spred,0,L-Spred+SL,L-Spred-TP,NULL,MagicNumber,iTime( Symbol(), PERIOD_D1, 0 ) + 86400);
    if (ticket==-1)
      {
         err=GetLastError();
         Print("error(",err,")");
      }
  }
else 
  {
    Comment("\n","Не возможно выставить OP_SELLSTOP",
            "\n","Цена не соответствует условию входа в рынок");
  }     
}
//+------------------------------------------------------------------+

я не программист, это точно не мое.. в коде цифры: + 86400 что означают?
 
Верх