Ответ
 
Опции темы
Старый 28.10.2013, 18:14   #1881 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,517
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2004
Сообщение от Andy200577 Посмотреть сообщение
Я так тоже хотел сначала сделать, но дело всё в том, что советник читает данные с одного индюка, который обращается к определённому сайту. И к сожалению, чтение данных другой пары с пары, на которой установлен советник происходит с постоянной ошибкой "unknown subwindow number -1 for ObjectCreate function". Но зато пару на которой он установлен, читает нормально. Получается, что выход только один, ставить сова на разные пары, с которых будут собираться данные и уже на основе этих данных принимается решение об открытии ордеров. Вот поэтому и задал этот вопрос.
Тогда сделай глобальную переменную GlobalVariableSet(). Если она есть и/или её значение == ???
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Andy200577 (28.10.2013), eevviill (28.10.2013)
Старый 28.10.2013, 18:33   #1882 (permalink)
Новичок форума
 
Аватар для Andy200577
 
Регистрация: 20.06.2012
Сообщений: 57
Репутация: 9
Andy200577
Сказал(а) спасибо: 3
Поблагодарили 8 раз(а) в 6 сообщениях
Поинты: 90
Сообщение от AlexeyVik Посмотреть сообщение
Тогда сделай глобальную переменную GlobalVariableSet(). Если она есть и/или её значение == ???
Спасибо! Отличная идея, просто ещё не работал с глобальными переменными, надо попробовать.
Andy200577 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2013, 18:34   #1883 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
Как найти два верхних/нижних фрактала подряд? Рисунок ниже.

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

Код:
//+------------------------------------------------------------------+
//|                                           Dvigubas fraktalas.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_buffers 1

double FRACTAL[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexBuffer(0,FRACTAL);
   SetIndexLabel(0,"Fractal");
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int limit;
   
   
   
//---- последний посчитанный бар будет пересчитан
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
//---- основной цикл
   for(int i = limit; i > 0; i--)
     {           
         
         int f1 = GetFractal("", 0, 0);
         int f2 = GetFractal("", 0, 1);
         
        if( f1 == 1 && f2 == 1) FRACTAL[i] = High[i]+100*Point;
        else 
         if( f1 == 0 && f2 == 0) FRACTAL[i] = Low[i]- 100*Point;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
        //|
//+----------------------------------------------------------------------------+
int GetFractal(string sy="0", int tf=0, int nf=0) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  int f=-1;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) 
  {
    if(iFractals(sy, tf, MODE_UPPER, i)>0)f=1;
    else
      if(iFractals(sy, tf, MODE_LOWER, i)>0)f=0;
    kf++;
    if (kf>nf) return(f);    
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
[свернуть]
Миниатюры:
Нажмите на изображение для увеличения
Название: gbpusdh1_1.PNG
Просмотров: 22
Размер:	23.9 Кб
ID:	138015  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас

Последний раз редактировалось NSerega; 29.10.2013 в 22:07.
gince на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2013, 18:55   #1884 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от gince Посмотреть сообщение
Как найти два верхних/нижних фрактала подряд? ...
Ну я делаю примерно так. Если с конца графика перебирать.
PHP код:
int count_upper_frak;
double frak1;
double frak2;
for(
int v=0;v<Bars-1;v++)
{
if(
count_upper_frak>1) break;
if(
iFr...!=empty_value && count_upper_frak==0
{
frak1=iFr...;
count_upper_frak++;
continue;
}
if(
iFr...!=empty_value && count_upper_frak==1
{
frak2=iFr...;
count_upper_frak++;
}

eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gince (30.10.2013)
Старый 29.10.2013, 19:33   #1885 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
Так для верхнего ? А красная проверка небудет тоже самое , что и первая ?
Код:
int count_upper_frak; 
double frak1; 
double frak2; 
for(int v=0;v<Bars-1;v++) 
{ 
   if(count_upper_frak>1) break; 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=EMPTY_VALUE && count_upper_frak==0)  
   { 
      frak1=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
      continue; 
   } 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=empty_value && count_upper_frak==1)  
   { 
      frak2=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
   }
   if(count_upper_frak==2) 
      bufferUPPER[v]= frak2+100*Point;
}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас
gince на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 30.10.2013, 06:47   #1886 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от gince Посмотреть сообщение
Так для верхнего ? А красная проверка небудет тоже самое , что и первая ?
Код:
int count_upper_frak; 
double frak1; 
double frak2; 
for(int v=0;v<Bars-1;v++) 
{ 
   if(count_upper_frak>1) break; 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=EMPTY_VALUE && count_upper_frak==0)  
   { 
      frak1=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
      continue; 
   } 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=empty_value && count_upper_frak==1)  
   { 
      frak2=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
   }
   if(count_upper_frak==2) 
      bufferUPPER[v]= frak2+100*Point;
}
Да. Это для верхнего. Для нижнего аналогично.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gince (30.10.2013)
Старый 30.10.2013, 12:19   #1887 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
MarketInfo(Symbol(),MODE_TICKVALUE)
Что то не могу понять что оно возвращает.
Возвращает 1(еврдол). Хотя по идеи должно быть 0.01(дол).
RVD
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.10.2013, 12:39   #1888 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от eevviill Посмотреть сообщение
MarketInfo(Symbol(),MODE_TICKVALUE)
Что то не могу понять что оно возвращает.
Возвращает 1(еврдол). Хотя по идеи должно быть 0.01(дол).
RVD
Возвращает цену 1 пункта. Для евробакса в пятизнаке это 1 доллар, в 4-знаке это 10 долларов. Для кросс курсов там более разнообразные значения бывают, скажем, для GBPAUD = 0.9501 прямо сейчас на пятизнаке

P.S. И да, это, конечно при объеме в 1 лот 1 пункт столько стоит.

Последний раз редактировалось ansol; 30.10.2013 в 12:41.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (30.10.2013)
Старый 30.10.2013, 12:52   #1889 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
...

P.S. И да, это, конечно при объеме в 1 лот 1 пункт столько стоит.
Теперь понятно.
Думаю не логичней ли было за мин лот сделать это?...
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.10.2013, 12:56   #1890 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от eevviill Посмотреть сообщение
Теперь понятно.
Думаю не логичней ли было за мин лот сделать это?...
Я встречал минлот 0.01 и 0.1, но возможны варианты более другие. Пришлось бы самому в проге нормировать, а с запятыми как-то в MQL4 не очень, пусть уж лучше выдают как положено - на единицу и делить и умножать приятней
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (30.10.2013)
Старый 30.10.2013, 14:03   #1891 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
MODE_TICKVALUE 16 Размер минимального изменения цены инструмента в валюте депозита
MODE_TICKSIZE 17 Минимальный шаг изменения цены инструмента в пунктах

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас
gince на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 04:56   #1892 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Имеется:
PHP код:
#import "wininet.dll"
 
int InternetAttemptConnect(int x);
 
int InternetOpenA(string sAgentint lAccessTypestring sProxyName ""string sProxyBypass ""int lFlags 0);
 
int InternetOpenUrlA(int hInternetSessionstring sUrlstring sHeaders ""int lHeadersLength 0int lFlags 0int lContext 0);
 
int InternetReadFile(int hFileintsBuffer[], int lNumBytesToReadintlNumberOfBytesRead[]);
 
int InternetCloseHandle(int hInet);
#import
...

  
int rv InternetAttemptConnect(0);
  if (
rv != 0)
   {
    Print(
"Ошибка при вызове InternetAttemptConnect()");
    return(
"");
   }
  
int hInternetSession InternetOpenA("Microsoft Internet Explorer"0""""0);
  if (
hInternetSession <= 0)
   {
    Print(
"Ошибка при вызове InternetOpenA()/Session");
    return(
"");
   }
  
int hURL InternetOpenUrlA(hInternetSessionurl""000);
  if (
hURL <= 0)
   {
    Print(
"Ошибка при вызове InternetOpenUrlA() ",url);
    
InternetCloseHandle(hInternetSession);
    return(
0);
   } 
И ошибка:
2013.11.04 09:48:18 News EURCHF,M15: Ошибка при вызове InternetOpenUrlA() _http://cdn.dailyfx.com/files/Calendar-11-03-2013.csv

Вообщем, пропало недавно. Индикатор новостей с открытым кодом. Откуда берется это всё и как исправить? Вижу, что в wininet.dll это было, может недавнее обновление винды исправило dll-ку? т.к. по этому урлу список новостей выкачивается с полпинка, можете проверить.
Вложения:
Тип файла: mq4 News.mq4 (25.9 Кб, 10 просмотров)

Последний раз редактировалось chocolate; 04.11.2013 в 05:59.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 05:35   #1893 (permalink)
Прохожий
 
Аватар для SteelKnight84
 
Регистрация: 07.07.2011
Сообщений: 1
Репутация: 1
SteelKnight84
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Простейший вопрос для программера, но для меня, не знающего язык - дебри.
Может кто знает что надо изменить в советнике, чтобы он мани-менеджмент применял с шагом не в 0.1, а в 0.01?
Вложения:
Тип файла: mq4 Adjustable_MA.mq4 (7.8 Кб, 3 просмотров)
SteelKnight84 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 08:42   #1894 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
...
Вообщем, пропало недавно. Индикатор новостей с открытым кодом. Откуда берется это всё и как исправить? Вижу, что в wininet.dll это было, может недавнее обновление винды исправило dll-ку? т.к. по этому урлу список новостей выкачивается с полпинка, можете проверить.
Попробуй или этот работает. Если нет, то может и длл виновата.
Вложения:
Тип файла: mq4 THV3 FFCal.mq4 (47.4 Кб, 18 просмотров)
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 08:44   #1895 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
У меня вопрос.
Я правильно понял. Возвращает целое число? Если да, то логично ли это?
double rez=5/2;
Alert(rez);
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 10:04   #1896 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от eevviill Посмотреть сообщение
У меня вопрос.
Я правильно понял. Возвращает целое число? Если да, то логично ли это?
double rez=5/2;
Alert(rez);
Понял правильно 5/2 = 2, потом, конечно, приводится к типу дубль, получается 2.0
Нелогично, они так время ЦП экономят, как я понял.
Так что надо 5.0/2 или 5/2.0
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (04.11.2013)
Старый 04.11.2013, 10:09   #1897 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от eevviill Посмотреть сообщение
Попробуй или этот работает. Если нет, то может и длл виновата.
Вот долбанные же прогеры, а?! Ну кто ж алертом ошибки выдаёт?!
Начинает сыпать алерты "webpage cannot be downloaded" и хрен что сделать в это время с терминалом, пришлось убить процесс.
Да, dll-ка видимо перестала работать А как чинить? Очевидно, что описание InternetOpenUrlA страдает неточностью в этой версии. Должен быть простой способ починить, ммм?
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 10:15   #1898 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
Вот долбанные же прогеры, а?! Ну кто ж алертом ошибки выдаёт?!
Начинает сыпать алерты "webpage cannot be downloaded" и хрен что сделать в это время с терминалом, пришлось убить процесс.
Да, dll-ка видимо перестала работать А как чинить? Очевидно, что описание InternetOpenUrlA страдает неточностью в этой версии. Должен быть простой способ починить, ммм?
У меня тот индикатор что я прикреплял работает.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 10:21   #1899 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,010
Репутация: 828
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 842 раз(а) в 554 сообщениях
Поинты: 1308
Сообщение от eevviill Посмотреть сообщение
У меня тот индикатор что я прикреплял работает.
И у меня работал в начале октября точно! Обновления на винду выходили где-то 14-го, может тогда и перестало, я не зафиксировал момент. И ошибка именно в этом месте, счас-то уже ясно. Важно узнать, откуда берется описание InternetOpenUrlA и тогда можно исправить самому. Либо: где ты брал свой индюк? Там автор должен был исправленную версию кинуть (наверное ) - тогда можно полезно разобраться с проблемой
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.11.2013, 10:23   #1900 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,681
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от ansol Посмотреть сообщение
И у меня работал в начале октября точно! Обновления на винду выходили где-то 14-го, может тогда и перестало, я не зафиксировал момент. И ошибка именно в этом месте, счас-то уже ясно. Важно узнать, откуда берется описание InternetOpenUrlA и тогда можно исправить самому. Либо: где ты брал свой индюк? Там автор должен был исправленную версию кинуть (наверное ) - тогда можно полезно разобраться с проблемой
Этот индикатор уже полтора года не менялся. Качал из своего поста.

Последний раз редактировалось eevviill; 04.11.2013 в 10:24. Причина: т-г р-д
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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