Ответ
 
Опции темы
Старый 26.06.2015, 06:12   #4041 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,518
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,110
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от Yurkov Посмотреть сообщение
А если полностью удалить лимит баров, какие это строчки?
Ничего тебе исправлять не надо. Выхватывая по одной строке из кода я насоветовал тебе не совсем правильно. Там оказалась своя логика и не совсем-уж неверная. Главное что работает.
В общем первое моё замечание, видимо, самое правильное. Были проблемы в МТ, сейчас исправлены. В МТ билд 842 твой индикатор работает абсолютно без проблем.
Обновись открыв счёт в MetaQuotes-Demo
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Yurkov (26.06.2015)
Старый 26.06.2015, 20:11   #4042 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 74
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 74 раз(а) в 60 сообщениях
Поинты: 284
Леш, тыркни в личку свой скайп или мыло, я кино про твою сову посмотрел.
_https://www.mql5.com/ru/market/product/7123

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


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

Последний раз редактировалось NSerega; 26.06.2015 в 22:48.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 27.06.2015, 05:45   #4043 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Yurkov Посмотреть сообщение
Сначала подумал, что объявлено мало буферов indicator_buffers, но не в этом, видимо, проблемка. Перелопатил уже весь инет в поисках ответа, а программист, который мне писал этого индюка, куда-то пропал. Мне, как человеку не знакомому с программированием, проблематично найти ответ, но интересно ж

Скрытый текст


//+------------------------------------------------------------------+
//| 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[i] = iMACD(_Symbol,_Period,macdFastEMA,macdSlowEMA,macdSignalPeriod,macdPrice,MODE_MAIN,i);
macdSignal[i] = iMACD(_Symbol,_Period,macdFastEMA,macdSlowEMA,macdSignalPeriod,macdPrice,MODE_SIGNAL,i);

//--- Find last SELL signal
if(macdHistogram[i]<0 && macdSignal[i]<0)
{
if(macdHistogram[i]>macdSignal[i] && 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[i]>0 && macdSignal[i]>0)
{
if(macdHistogram[i]<macdSignal[i] && 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[]; и размер массива (если нужно) регулирвать в процессе торгов доп функциями, но только с учетом того, что в безразмерном массиве незаполненные ячейки будут нулевыми и в коде сова или индикатора нужно обязательно учитывать объем заложенных данных в массив, не превышая их количество, если оно может меняться в процессе торгов.

Последний раз редактировалось vladradon; 27.06.2015 в 06:34.
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.06.2015, 13:54   #4044 (permalink)
Интересующийся
 
Аватар для planod
 
Регистрация: 24.12.2013
Сообщений: 11
Репутация: 1
planod
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 8
Друзья, всем привет. Помогите, пожалуйста, а то навык программирования совсем потерял. Суть: из истории ордеров надо выбрать последний закрытый и определить его тип. Заранее спасибо.
planod вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.06.2015, 14:14   #4045 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,252
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 347
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1270
Отправить сообщение для Ugar с помощью ICQ
Как то так.
Код:
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 если последний закрытый ордер не найден.
Здесь нет фильтрации ордеров по символу и маджику, при желании добавь.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
planod (29.06.2015), Viko2000 (29.06.2015)
Старый 02.07.2015, 08:45   #4046 (permalink)
Интересующийся
 
Аватар для vlados73
 
Регистрация: 08.09.2014
Сообщений: 3
Репутация: 1
vlados73
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0

По умолчанию помогите разобраться


Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?
vlados73 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.07.2015, 09:52   #4047 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,009
Репутация: 829
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 843 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от vlados73 Посмотреть сообщение
Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?
Хочешь сам разобраться?
Прога вытаскивает файл с Инетернета на диск(правда *.csv, но не суть), сохраняет, распиливает на строки и выводит в качестве индикатора.
Это индикатор новостей на графике по сути, до сих пор работает, хотя и старенький уже.
Исходный код во вложении(с комментариями, все понятно вроде бы)
Вложения:
Тип файла: mq4 News.mq4 (26.1 Кб, 12 просмотров)

Последний раз редактировалось ansol; 02.07.2015 в 09:55.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 02.07.2015, 10:11   #4048 (permalink)
Местный знаток
 
Аватар для vlad_123
 
Регистрация: 29.01.2013
Сообщений: 335
Репутация: 824
vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 -
Сказал(а) спасибо: 29
Поблагодарили 820 раз(а) в 327 сообщениях
Поинты: 388
Сообщение от vlados73 Посмотреть сообщение
Подскажите возможно ли в MQL4 считать веб страницу и сохранить ее TXT файле. Как это можно сделать?
Пользуй на здоровье

Функция считывания URL в string

Код:
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.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мониторинг советников: http://www.myfxbook.com/members/vlad_123/

На заказ не программирую.
vlad_123 на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
vlados73 (02.07.2015)
Старый 02.07.2015, 10:32   #4049 (permalink)
Интересующийся
 
Аватар для vlados73
 
Регистрация: 08.09.2014
Сообщений: 3
Репутация: 1
vlados73
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Функця стывания URL будет работать без wininet.dll?
vlados73 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.07.2015, 12:35   #4050 (permalink)
Местный знаток
 
Аватар для vlad_123
 
Регистрация: 29.01.2013
Сообщений: 335
Репутация: 824
vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 -
Сказал(а) спасибо: 29
Поблагодарили 820 раз(а) в 327 сообщениях
Поинты: 388
Сообщение от vlados73 Посмотреть сообщение
Функця стывания URL будет работать без wininet.dll?
Это стандартная dll'а винды, чем она вас обидела?
А касабельно вопроса - чессгря даже и не знаю, через какое API работает используемая функция, но в советнике дополнительно подключать никаких библиотек не нужно.
Там используется функция WebRequest _http://docs.mql4.com/ru/common/webrequest

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мониторинг советников: http://www.myfxbook.com/members/vlad_123/

На заказ не программирую.
vlad_123 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 02.07.2015, 12:40   #4051 (permalink)
Интересующийся
 
Аватар для vlados73
 
Регистрация: 08.09.2014
Сообщений: 3
Репутация: 1
vlados73
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Сообщение от vlad_123 Посмотреть сообщение
Это стандартная dll'а винды, чем она вас обидела?
А касабельно вопроса - чессгря даже и не знаю, через какое API работает используемая функция, но в советнике дополнительно подключать никаких библиотек не нужно.
Там используется функция WebRequest _http://docs.mql4.com/ru/common/webrequest
спасибо влад попробую разобраться.
vlados73 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.07.2015, 15:59   #4052 (permalink)
Интересующийся
 
Аватар для Vanek_V
 
Регистрация: 23.03.2015
Сообщений: 3
Репутация: 1
Vanek_V
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6

Вопрос НУЖНА ПОМОЩЬ!!!


Всем доброго времени суток.
Пытаюсь освоить 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
[свернуть]

Последний раз редактировалось NSerega; 07.07.2015 в 20:42.
Vanek_V вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.07.2015, 22:21   #4053 (permalink)
Новичок форума
 
Аватар для CrazyDoc
 
Регистрация: 02.05.2015
Адрес: Ступино
Сообщений: 28
Репутация: 12
CrazyDoc
Сказал(а) спасибо: 4
Поблагодарили 11 раз(а) в 7 сообщениях
Поинты: 20
Читай в описании 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
Советник работает. Компилятор выдал только ПРЕДУПРЕЖДЕНИЯ, что значит - с большой долей вероятности он работать будет нестабильно.

Последний раз редактировалось CrazyDoc; 07.07.2015 в 22:24.
CrazyDoc вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.07.2015, 02:49   #4054 (permalink)
Местный знаток
 
Аватар для vlad_123
 
Регистрация: 29.01.2013
Сообщений: 335
Репутация: 824
vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 -
Сказал(а) спасибо: 29
Поблагодарили 820 раз(а) в 327 сообщениях
Поинты: 388
Сообщение от CrazyDoc Посмотреть сообщение
что значит - с большой долей вероятности он работать будет нестабильно.
Не вводите в заблуждение!
Тот же OrderSelect прекрасно работает без проверки возвращаемого значения в 99% случаев.
А так - да, лучше проводить проверку.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мониторинг советников: http://www.myfxbook.com/members/vlad_123/

На заказ не программирую.
vlad_123 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 08.07.2015, 05:41   #4055 (permalink)
Новичок форума
 
Аватар для CrazyDoc
 
Регистрация: 02.05.2015
Адрес: Ступино
Сообщений: 28
Репутация: 12
CrazyDoc
Сказал(а) спасибо: 4
Поблагодарили 11 раз(а) в 7 сообщениях
Поинты: 20
Сообщение от vlad_123 Посмотреть сообщение
Не вводите в заблуждение!
Тот же OrderSelect прекрасно работает без проверки возвращаемого значения в 99% случаев.
А так - да, лучше проводить проверку.
это 99% реальных, расчетных 50% либо true, либо false
CrazyDoc вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 08.07.2015, 05:46   #4056 (permalink)
Местный знаток
 
Аватар для vlad_123
 
Регистрация: 29.01.2013
Сообщений: 335
Репутация: 824
vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 - vlad_123 -
Сказал(а) спасибо: 29
Поблагодарили 820 раз(а) в 327 сообщениях
Поинты: 388
Сообщение от CrazyDoc Посмотреть сообщение
это 99% реальных, расчетных 50% либо true, либо false
Тогда потрудитесь подкрепить свои расчеты статистикой - предоставьте советника, который в цикле селектает ордер(а) и выдает количество возвращенных true/false.
Складывается ощущение, что наличие двух вариантов события делает их (по вашему мнению) равновероятными, что с точки зрения статистики абсолютно неправильно.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Мониторинг советников: http://www.myfxbook.com/members/vlad_123/

На заказ не программирую.

Последний раз редактировалось vlad_123; 08.07.2015 в 05:49.
vlad_123 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 08.07.2015, 05:54   #4057 (permalink)
Новичок форума
 
Аватар для CrazyDoc
 
Регистрация: 02.05.2015
Адрес: Ступино
Сообщений: 28
Репутация: 12
CrazyDoc
Сказал(а) спасибо: 4
Поблагодарили 11 раз(а) в 7 сообщениях
Поинты: 20
Уел. Харош флудить. Новичкам это не поможет, старики и так все поняли.
CrazyDoc вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.07.2015, 21:50   #4058 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
привет всем, подскажите, как правильно изменить код совы, чтобы в условиях открытия поз на тайме 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,iTimeSymbol(), PERIOD_D1) + 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,iTimeSymbol(), PERIOD_D1) + 86400);
    if (
ticket==-1)
      {
         
err=GetLastError();
         Print(
"error(",err,")");
      }
  }
else 
  {
    
Comment("\n","Не возможно выставить OP_SELLSTOP",
            
"\n","Цена не соответствует условию входа в рынок");
  }     
}
//+------------------------------------------------------------------+ 
[свернуть]

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
больше молока получит тот котенок, который больше всех пищит..
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.07.2015, 21:55   #4059 (permalink)
бродяга
 
Аватар для gush
 
Регистрация: 24.01.2011
Сообщений: 2,520
Репутация: 5506
gush gush gush gush gush gush gush gush gush gush gush
Сказал(а) спасибо: 8,488
Поблагодарили 5,290 раз(а) в 1,871 сообщениях
Поинты: 1124
Сообщение от 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,iTimeSymbol(), PERIOD_D1) + 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,iTimeSymbol(), PERIOD_D1) + 86400);
    if (
ticket==-1)
      {
         
err=GetLastError();
         Print(
"error(",err,")");
      }
  }
else 
  {
    
Comment("\n","Не возможно выставить OP_SELLSTOP",
            
"\n","Цена не соответствует условию входа в рынок");
  }     
}
//+------------------------------------------------------------------+ 
[свернуть]
я не программист, это точно не мое.. в коде цифры: + 86400 что означают?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
больше молока получит тот котенок, который больше всех пищит..
gush вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.07.2015, 22:00   #4060 (permalink)
♔♕♖♗♘♙
 
Аватар для DomovenokBrest
 
Регистрация: 27.10.2012
Адрес: Белоруссия, Брест
Сообщений: 2,241
Репутация: 10256
DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest DomovenokBrest
Сказал(а) спасибо: 11,242
Поблагодарили 10,234 раз(а) в 2,362 сообщениях
Поинты: 586
Отправить сообщение для DomovenokBrest с помощью Skype™
Сообщение от gush Посмотреть сообщение
я не программист, это точно не мое.. в коде цифры: + 86400 что означают?
1 день = 24 часа = 1440 минут = 86400 секунд

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DomovenokBrest на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (12.07.2015)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 22:23. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO