Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Робот для Квика через API Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Skornet



Зарегистрирован: 22.02.2014
Сообщения: 31
Откуда: как и все

СообщениеДобавлено: Пт Апр 18, 2014 6:34 pm Ответить с цитатой Вернуться к началу

Добрый вечер Олег.

Всё оказалось гораздо интересней и проще, в этой строке:

rk5 = ( ys1 - rk3 ) * 200 / rk4; удалил " * 200 / rk4" , стало :

rk5 = ( ys1 - rk3 ) и всё. Этот множитель перемасштабирует шкалу индикатора.
Посмотреть профиль Отправить личное сообщение
BFG



Зарегистрирован: 17.03.2014
Сообщения: 17

СообщениеДобавлено: Пн Апр 21, 2014 12:32 pm Ответить с цитатой Вернуться к началу

Ты просил напомнить по поводу отливок в начале недели, ну так вот, напоминаю Smile
Цитата:

Я сам не прогреммер, но по аналогии внес изменения в твой код доливки, в целях экономии твоего времени выделил жирным то, что я поменял, посмотри плиз при возможности:

Код:
Filter = 1;
TimeFrame      = 60*15;            // таймфрейм в секундах.
Account      = "NL0011100043";      // Номер счета
Client_Code   = "38000";            // Код Клиента
Quik         = "C:\\QUIK";         // путь к Квику
Tickers = "LKOH,SBER";             // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами
/////////////

///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////

if(Name() == "LKOH") {            //Символ как он называется в Ами
   SecCode      = "LKOH";            
   Class         = "EQBR";
   Lots         = 12;
   TickS         = 0.1;         // Минимальный шаг цены торгуемой бумаги
   Otstup      = 20;         // Заявка будет выставлена хуже текущей цены на Otstup рублей
   [b]LimS      = 6;            // число лотов для фикса по покупке
   LimC         = 6;            // число лотов для фикса по шорту[/b]
}
else if(Name() == "SBER") {         //Символ как он называется в Ами
   SecCode      = "SBER03";            
   Class         = "EQBR";
   Lots         = 12;
   TickS         = 0.01;         // Минимальный шаг цены торгуемой бумаги
   Otstup      = 1;            // Заявка будет выставлена хуже текущей цены на Otstup рублей
   [b]LimS      = 6;            // число лотов для фикса по покупке
   LimC         = 6;            // число лотов для фикса по шорту[/b]
}
//////////////Система///////////////

Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));

[b]  for(i=BarCount-1;i>1;i--)
{
if(Buy[i] == 1)
{
entry = C[i];
sig = "BUY";
targetS = entry + (entry * .0092);

bars = i;
i = 0;
}
if(Sell[i] == 1)
{
sig = "SELL";
entry = C[i];
targetC = entry - (entry * .0112);

bars = i;
i = 0;
}
}

Sell2 = Close>=targetS;
Cover2 = Close<=targetC;   [/b]


///////////Конец Системы////////////

Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);
[b] 
Sell2 = Ref(Buy2, -1);
Cover2 = Ref(Short2, -1); [/b]

////////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + "  " + Name();
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");
SdID = AS_READ_PARAM("Quik_Robot", Name(), "BarID");
BarID = LastValue(Ref(DayOfWeek()*1000000 + TimeNum(), -1));

///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders(bs, pr, Lot)
{
   connection = 0;

   QC = AS_QUIK_CONNECT(Quik);

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
 
   if(connection == 1)
   {
      order = AS_QUIK_SEND_SYNC_NEWORDER(   "123",   // OrderID - Любые цифры
                     Account,
                     Client_Code,
                     "L",   // Тип заявки M-рыночная, L-лимитированная
                     Class,
                     SecCode,
                     bs,
                     pr,
                     Lot);
   }

   if(StrToNum(order) > 100)
{
   iz = "исполнена";
   coloriz = colorGreen;
   str = str + "  заяка исполнена" + " ответ сервера=" + order;
   if(pos == 0 AND bs == "S")         // шорт
   {
      AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);      
   }         
   else if(pos < 0 AND bs == "B")          // закрытие шорта
   {
      AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
   }         
   else if(pos == 0 AND bs == "B")       // лонг
   {
      AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);
   }
   else if(pos > 0 AND bs == "S")          // закрытие лонга
   {
      AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", 0);         
   }   
   else if[b](pos = Lots AND bs == "S")      // отливка от покупки (частичный фикс позы ) [/b] -- здесь не знаю как условие правильно написать
   {
      AS_WRITE_PARAM("Quik_Robot", Name(), "pos", [b]pos -LimS); [/b]
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", BarID);
   }
   else if[b](abs(pos) = Lots AND bs == "B")      // отливка от шорта (частичный фикс позы )[/b] -- здесь не знаю как условие правильно написать
   {

      AS_WRITE_PARAM("Quik_Robot", Name(), "pos",[b] pos   + LimC); [/b]
      AS_WRITE_PARAM("Quik_Robot", Name(), "BarID", BarID);
   }
   str = str + "  позиция на момент исполнения " + pos;
}
else {
   iz = "не исполнена";
   coloriz = colorRed;
   str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
}
////////// конец Функций //////////

if (TimeFrame == Interval() AND Permit_Ticker)
{
   if(Buy1[BarCount-1] AND pos == 0) {
      str = str + "  Buy";
      sd = "Buy";
      orders("B", round(C[BarCount-1]) + Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Sell1[BarCount-1] AND pos > 0) {
      str = str + "  Sell";
      sd = "Sell";
      orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Short1[BarCount-1] AND pos == 0) {
      str = str + "  Short";
      sd = "Short";
      orders("S", round(C[BarCount-1]) - Otstup, Lots);
      AS_WRITE_FILE("log.quik", str);
   }
   else if(Cover1[BarCount-1] AND pos < 0) {
      str = str + "  Cover";
      sd = "Cover";
      orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
      AS_WRITE_FILE("log.quik", str);
   }
   else if([b]Sell2[BarCount-1] AND pos =Lots AND BarID != SdID)[/b] -- здесь не знаю как условие правильно написать
{
      str = str +[b]   " Sell (отливка)"; [/b]
      sd = [b] "SellOut";[/b]
      orders[b]("S", round(C[BarCount-1]) - Otstup,  LimS); [/b]
      AS_WRITE_FILE("log.quik", str);
   }
   else if([b]Cover2[BarCount-1] AND abs(pos) =Lots AND BarID != SdID)[/b] -- здесь не знаю как условие правильно написать
{
      str = str + [b]  " Cover (отливка)"; [/b]
      sd = [b]  "CoverOut";[/b]
      orders [b]("B", round(C[BarCount-1]) + Otstup,LimC); [/b]
      AS_WRITE_FILE("log.quik", str);
   }

}
else if(TimeFrame != Interval()) {
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                     "ошибка", timeout = 5, left = -1, top = -1 );
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8493

СообщениеДобавлено: Пн Апр 21, 2014 12:54 pm Ответить с цитатой Вернуться к началу

Ок. Сегодня посмотрю.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8493

СообщениеДобавлено: Пн Апр 21, 2014 4:01 pm Ответить с цитатой Вернуться к началу

Значит так.
Поскольку поза сокращается только один раз, то все эти заморочки с запоминанием индекса бара (BarID) при сделке не нужны. Просто отслеживаем текущий размер позиции и по нему определяем целая это позиция или сокращение уже было.


Код:

Filter = 1;
TimeFrame      = 60*15;            // таймфрейм в секундах.
Account      = "NL0011100043";     // Номер счета
Client_Code   = "38000";           // Код Клиента
Quik         = "C:\\QUIK";         // путь к Квику
Tickers = "LKOH,SBER";             // торгуемые символы через запятую без пробелов. Для контроля ошибок. Так, как они называются в Ами
/////////////

///////////////
// задаем размер лотов, коды и отступ для разных символов
/////////////

if(Name() == "LKOH") {          //Символ как он называется в Ами
   SecCode      = "LKOH";             
   Class         = "EQBR";
   Lots         = 12;
   TickS         = 0.1;         // Минимальный шаг цены торгуемой бумаги
   Otstup      = 20;            // Заявка будет выставлена хуже текущей цены на Otstup рублей
   LimS      = 6;               // число лотов для фикса по покупке
   LimC         = 6;            // число лотов для фикса по шорту
}
else if(Name() == "SBER") {     //Символ как он называется в Ами
   SecCode      = "SBER03";             
   Class         = "EQBR";
   Lots         = 12;
   TickS         = 0.01;        // Минимальный шаг цены торгуемой бумаги
   Otstup      = 1;             // Заявка будет выставлена хуже текущей цены на Otstup рублей
   LimS      = 6;               // число лотов для фикса по покупке
   LimC         = 6;            // число лотов для фикса по шорту
}
//////////////Система///////////////
pos = AS_READ_PARAM("Quik_Robot", Name(), "pos");
target = AS_READ_PARAM("Quik_Robot", Name(), "target");

Buy1 = Cross(C, MA(C, 40)) AND C > MA(C, 20);
Sell1 = Cross(MA(C, 20), C);
Short1 = Cross(MA(C, 40), C) AND C < MA(C, 20);
Cover1 = Cross(C, MA(C, 20));

if(Buy[BarCount - 1] == 1)
{
  target = entry + (entry * .0092);
}
if(Sell[BarCount - 1] == 1)
{
  target = entry - (entry * .0112);
}

if(pos == Lots AND C[BarCount - 2] >= target)
{
  Sell2 = 1;
}
if(pos == -1*Lots AND C[BarCount - 2] <= target)
{
  Cover2 = 1;
}

///////////Конец Системы////////////

Buy1 = Ref(Buy1, -1);
Sell1 = Ref(Sell1, -1);
Short1 = Ref(Short1, -1);
Cover1 = Ref(Cover1, -1);

////////////////////////////////////

text = iz = sd = order = "";
color = coloriz = colorDefault;
price = 0;
str = Now(0) + "  " + Name();

///////////// проверка наличия символа в списке для торговли ////////////////

k = 0;
Permit_Ticker = False;
do {
  Tick = StrExtract(Tickers, k);
  k++;
  if(Name() == Tick)
    Permit_Ticker = True;
} while(Tick != "");

///////////    Функции  ////////////

procedure orders(bs, pr, Lot)
{
   connection = 0;

   QC = AS_QUIK_CONNECT(Quik);

   if (QC == 1)
   {
      connection = 1;
      text = "Есть соединение с сервером";
      Color = colorGreen;
   }
   else if (QC == -1)
   {
      text = "нет соединения с квиком";
      Color = colorRed;   
   }
   else if (QC == -2)
   {
      text = "нет соединения с сервером";
      Color = colorRed;
   }
   else
   {
      text = "фигня какая то";
      Color = colorRed;
   }
   
   if(connection == 1)
   {
      order = AS_QUIK_SEND_SYNC_NEWORDER(   "123",   // OrderID - Любые цифры
                     Account,
                     Client_Code,
                     "L",   // Тип заявки M-рыночная, L-лимитированная
                     Class,
                     SecCode,
                     bs,
                     pr,
                     Lot);
   }

 if(StrToNum(order) > 100)
 {
    iz = "исполнена";
    coloriz = colorGreen;
    str = str + "  заяка исполнена" + " ответ сервера=" + order;
    if(pos == 0 AND bs == "S")            // шорт
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", -1*Lot);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", target);       
    }         
    else if(pos < 0 AND bs == "B")        // закрытие шорта
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", 0);
    }         
    else if(pos == 0 AND bs == "B")       // лонг
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", Lot);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", target);
    }
    else if(pos > 0 AND bs == "S")        // закрытие лонга
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", 0);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", 0);         
    }   
    else if(pos = Lots AND bs == "S")  // отливка от покупки (частичный фикс позы )
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", pos - LimS);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", 0);
       str = str + "  сокращение длинной позиции ";
    }
    else if[b](abs(pos) = Lots AND bs == "B")      // отливка от шорта (частичный фикс позы )
    {
       AS_WRITE_PARAM("Quik_Robot", Name(), "pos", pos   + LimC);
       AS_WRITE_PARAM("Quik_Robot", Name(), "target", 0);
       str = str + "  сокращение короткой позиции ";
    }
    str = str + "  позиция на момент исполнения " + pos;
 }
 else {
    iz = "не исполнена";
    coloriz = colorRed;
    str = str + "  заяка НЕ исполнена" + " ответ сервера=" + order;
 }
 ////////// конец Функций //////////

 if (TimeFrame == Interval() AND Permit_Ticker)
 {
    if(Buy1[BarCount-1] AND pos == 0) {
       str = str + "  Buy";
       sd = "Buy";
       orders("B", round(C[BarCount-1]) + Otstup, Lots);
       AS_WRITE_FILE("log.quik", str);
    }
    else if(Sell1[BarCount-1] AND pos > 0) {
       str = str + "  Sell";
       sd = "Sell";
       orders("S", round(C[BarCount-1]) - Otstup, abs(pos));
       AS_WRITE_FILE("log.quik", str);
    }
    else if(Short1[BarCount-1] AND pos == 0) {
       str = str + "  Short";
       sd = "Short";
       orders("S", round(C[BarCount-1]) - Otstup, Lots);
       AS_WRITE_FILE("log.quik", str);
    }
    else if(Cover1[BarCount-1] AND pos < 0) {
       str = str + "  Cover";
       sd = "Cover";
       orders("B", round(C[BarCount-1]) + Otstup, abs(pos));
       AS_WRITE_FILE("log.quik", str);
    }
    else if(Sell2 AND pos == Lots)
 {
       str = str + " Sell (отливка)";
       sd = "SellOut";
       orders("S", round(C[BarCount-1]) - Otstup, LimS);
       AS_WRITE_FILE("log.quik", str);
    }
    else if(Cover2 AND pos == -Lots)
 {
       str = str + " Cover (отливка)";
       sd = "CoverOut";
       orders("B", round(C[BarCount-1]) + Otstup, LimC);
       AS_WRITE_FILE("log.quik", str);
    }

 }
 else if(TimeFrame != Interval()) {
    PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
                      "ошибка", timeout = 5, left = -1, top = -1 );
 }

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BFG



Зарегистрирован: 17.03.2014
Сообщения: 17

СообщениеДобавлено: Ср Апр 23, 2014 10:07 am Ответить с цитатой Вернуться к началу

ОГРОМНОЕ СПАСИБО!!! Smile
Буду тестить Smile

Созрел еще один вопрос:
В выложенном тобой роботе со стопом используются проценты. Во многих местах попадалось мнение, что ApplyStop не очень удобная тема. А мне нужно как вариант выхода автоматизировать выход по трейлу вида:
Код:

ApplyStop(stopTypeTrailing, stopModePoint, 10, True, True );

В коде много нужно будет переколбасить под это дело?
Если много, то напиши плиз пример хотя бы одной строки как это должно быть, а я сам по аналогии постараюсь доделать.

И еще один нубо вопрос Smile :
Если в настройках АА будет выставлен трэил, будет ли он работать при запущеном роботе?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8493

СообщениеДобавлено: Ср Апр 23, 2014 11:10 am Ответить с цитатой Вернуться к началу

Увы. Ничего не могу сейчас ответить. У меня тут с компами полный пипец. Все стоит, работать неначем, все потерял. Crying or Very sad

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 490

СообщениеДобавлено: Ср Апр 23, 2014 2:35 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Увы. Ничего не могу сейчас ответить. У меня тут с компами полный пипец. Все стоит, работать неначем, все потерял. Crying or Very sad


что потерял?
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Апр 23, 2014 3:38 pm Ответить с цитатой Вернуться к началу

Чаво потерялось? Если файловая система нарушена то всякие афлки восстановить не будет проблемой - главное ничего не писать на диск и не форматировать.
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8493

СообщениеДобавлено: Ср Апр 23, 2014 4:08 pm Ответить с цитатой Вернуться к началу

Потерял ВСЕ. Даже, блять, пароль от яндекс денег....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
MrDrJOKER



Зарегистрирован: 22.06.2009
Сообщения: 490

СообщениеДобавлено: Ср Апр 23, 2014 4:18 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Потерял ВСЕ. Даже, блять, пароль от яндекс денег....


хард накрылся? обычный, ssd?
Посмотреть профиль Отправить личное сообщение
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Апр 23, 2014 8:43 pm Ответить с цитатой Вернуться к началу

Если хард накрылся, то не опускай руки - мона восстановить если не все, то большинство данных. Чем меньше файл, тем больше вероятность восстановления. Я лично пользовался R-Studio - очень положительные впечатления. Легко находится на торрентах. На крайняк мона обратиться в спец сервис по восстановлению данных. Какой хз - надо гуглить, смотреть отзывы.
А если угнали аккаунт - думаю письмо в службу поддержки поможет решить проблему.
Так расскажи поподробней чо случилось - ща решим коллективным разумом.
Посмотреть профиль Отправить личное сообщение ICQ Number
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Чт Апр 24, 2014 5:23 am Ответить с цитатой Вернуться к началу

spitfire писал(а):
Если хард накрылся, то не опускай руки - мона восстановить если не все, то большинство данных. Чем меньше файл, тем больше вероятность восстановления. Я лично пользовался R-Studio - очень положительные впечатления. Легко находится на торрентах. На крайняк мона обратиться в спец сервис по восстановлению данных. Какой хз - надо гуглить, смотреть отзывы.
А если угнали аккаунт - думаю письмо в службу поддержки поможет решить проблему.
Так расскажи поподробней чо случилось - ща решим коллективным разумом.

Угу. У меня пару лет назад тоже хард накрывался. Запил на стартовой дорожке. Это значит, что диск больше стартануть не может в принципе, т.к. на стартовой дорожке находится инфа о разметке. Единственный вариант восстановления - вытаскивать пакет пластин из корпуса и вставлять в специальную приладу, которая будет их вращать и тупо считает бит за битом всё, что на них осталось. Прилада эта есть в Питере и в Германии, цена вопроса - 5 тыщ. нерусских денег (с учётом почтовых расходов), причём результат не гарантируется (деньги в случае неудачи, конечно, вернули бы, за исключением расходов). Пришлось всплакнуть и забить. А потерял тоже всё, наработанное за 10 лет - все проекты, сделанные на предыдущих местах работы, фотки с молодых свадеб-пьянок-гулянок, все наработки по трейдингу, все накопленные файлы... В общем, абсолютно всё, как будто у меня никогда и не было компа. Теперь учёный, облачные хранилища - мои лучшие друзья. Smile Чего и всем советую.
Посмотреть профиль Отправить личное сообщение ICQ Number
spitfire



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Чт Апр 24, 2014 8:37 am Ответить с цитатой Вернуться к началу

А зачем все яйца хранить в одной корзине?? Никто не отменял резервные копирования и рейд-массивы. А облакам я как то не доверяю - потенциально небезопасно.
Посмотреть профиль Отправить личное сообщение ICQ Number
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Чт Апр 24, 2014 9:24 am Ответить с цитатой Вернуться к началу

Вот резервные копии в облаках и хранятся. Что там небезопасного? Архивируешь всю нужную инфу в рар с 20-30-значным паролем и спокойно хранишь его в облаке. Фиг кто взломает.
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 8493

СообщениеДобавлено: Чт Апр 24, 2014 10:07 am Ответить с цитатой Вернуться к началу

У меня железо нифига не сломалось. И резервные копии были. Просто я тщательно руками все похерил. Не нарочно конечно. Типа по невнимательности.

Удалось восттановить часть семейного фотоархива. Laughing

Богу слава хоть пароль админа от сайта помню и вообще доступ к аккаунту сайта восстановил. Wink

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen