Получить 100$ на счет бесплатно!!

Получить депозит форекс за общение на форуме Бездепозитный бонус 100$

Полезные функции 2

Функции совместимые с использованием в MT4 билд >= 562
  
МедальКубок
Сообщений: 536
Назад

Пример



Индикатор

для билда от 562

[code=php]
//+------------------------------------------------------------------+
//| iStoh_test3.mq4 |
//| Copyright 2013, artamir |
//| http:\\forexmd.ucoz.org |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, artamir"
#property link "http:\\forexmd.ucoz.org"

#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 100
#property indicator_buffers 8
#property indicator_color1 LightGreen
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_color4 LightGreen
#property indicator_color5 Red
#property indicator_color6 Yellow

#include
#include
#include
#include

double M[];
double S[];
double A[];
double MH4[];
double SH4[];
double AH4[];


int Sth, Sth_h4;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
aSth_Init(); //инициализация массива,
Sth = aSth_set(); //предопределенные параметры на текущем тф
Sth_h4 = aSth_set(5,3,3,MODE_SMA,0,"",240);//Задаем значения для тф = H4(240 мин.)
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,M);
SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,S);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,A);
SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,MH4);
SetIndexEmptyValue(3,0.0);

SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,SH4);
SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,AH4);
SetIndexEmptyValue(5,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int cb=IndicatorCounted();
int lim = Bars - cb;

if(lim<=0)lim++;

for(int i=lim; i>=0; i--){
M = iSth_get(Sth, MODE_MAIN, i);
S = iSth_get(Sth, MODE_SIGNAL, i);
A = iSth_get(Sth, ST_MODE_AVG, i);

MH4 = iSth_get(Sth_h4, MODE_MAIN, i);
SH4 = iSth_get(Sth_h4, MODE_SIGNAL, i);
AH4 = iSth_get(Sth_h4, ST_MODE_AVG, i);
}
//----

//----
return(0);
}

[/code]
Прикрепленные файлы:
iTestiStoh_6ghme.mq4 | 2.97 Кб | Скачали: 410
iTestiStoh_6ghme.ex4 | 37.81 Кб | Скачали: 363
МедальКубок
Сообщений: 536
Начало

sysIndexedArray


Работа с индексированным двумерным массивом.
Версия: 3.1.0.18
Дата: 2014.02.28

void AId_Init2(double &a[][], int &aI[])

double AId_get2(double &a[][], int &aI[], int idx=0, int col=0)

double AId_Compare(double v1, double v2)

int AI_setInterval(int &aI[], int start_idx=0, int end_idx=-256)

void AI_Swap(int &aI[], int i=0, int j=0)

AId_QuickSort2(double &a[][], int &aI[], int idx_min=-1, int idx_max=-1, int col=0, int mode=0)

int AId_QuickSearch2(double &a[][], int &aI[], int col=0, double element=0.0, int mode=AI_EQ)

int AId_SearchFirst2(double &a[][], int &aI[], int col=0, double element=0.0)

int AId_SearchLast2(double &a[][], int &aI[], int col=0, double element=0.0)

int AId_SearchGreat2(double &a[][], int &aI[], int col=0, double element=0.0)

int AId_SearchLess2(double &a[][], int &aI[], int col=0, double element=0.0)

void AIF_init(void)

int AIF_addRow(void)

void AIF_filterAdd(int col, int aop=AI_EQ, double min=0, double max=0, int sop=AI_AND)

void AIF_filterAdd_AND(int col, int aop=AI_EQ, double min=0, double max=0)

void AId_Select2(double &a[][], int &aI[])

void AId_Print2(double &a[][], int &aI[], int d = 4, string fn = "AId_PrintArray_")

Пример использования библиотеки
Прикрепленные файлы:
sysIndexedArray_258o6.mqh | 13.92 Кб | Скачали: 361
Редактировалось: 20 раз (Последний: 28 февраля 2014 в 20:28)
МедальКубок
Сообщений: 536
Назад

AId_Init2


Инициализация массива индексов.

[code=php]
void AId_Init2(double &a[][], int &aI[]){
/**
\version 0.0.0.1
\date 2013.11.06
\author Morochin Artiom
\details Инициализация массива индексов.
\internal
>Hist:
@0.0.0.1@2013.11.06@artamir [+]
>Rev:0
*/

ArrayResize(aI,ArrayRange(a,0));
for(int i=0; i aI=i;
}
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_get2


Возвращает значение элемента исходного массива через индекс

[code=php]
double AId_get2(double &a[][], int &aI[], int idx=0, int col=0){
/**
\version 0.0.0.1
\date 2014.02.25
\author Morochin Artiom
\details Возвращает значение элемента исходного массива через индекс
\internal
>Hist:
@0.0.0.1@2014.02.25@artamir [+]
>Rev:0
*/

string fn="AId_get2";
return(a[aI[idx]][col]);
}
[/code]
Редактировалось: 1 раз (Последний: 26 февраля 2014 в 18:44)
МедальКубок
Сообщений: 536
Назад

AId_Compare


Возвращает результат сравнения двух вещественных параметров.

[code=php]
double AId_Compare(double v1, double v2){
/**
\version 0.0.0.1
\date 2014.02.25
\author Morochin Artiom
\details Возвращает результат сравнения двух вещественных параметров.
\internal
>Hist:
@0.0.0.1@2014.02.25@artamir [+] AId_Compare
>Rev:0
*/

string fn="AId_Compare";
if(MathAbs(v1-v2)<=0.00001)return(AI_EQ);

if(v1>v2)return(AI_GREAT);

return(AI_LESS);

}
[/code]
Редактировалось: 1 раз (Последний: 26 февраля 2014 в 19:04)
МедальКубок
Сообщений: 536
Назад

AI_setInterval


Обрезает индекс по интервалу.


[code=php]
int AI_setInterval(int &aI[], int start_idx=0, int end_idx=-256){
/**
\version 0.0.0.1
\date 2014.02.25
\author Morochin Artiom
\details Обрезает индекс по интервалу.
\internal
>Hist:
@0.0.0.1@2014.02.25@artamir [+] AI_setInterval
>Rev:0
*/

string fn="AI_setInterval";
int aT[];
ArrayResize(aT,0);

if(start_idx==AI_EMPTY || end_idx==AI_EMPTY){
ArrayResize(aI,0);
return(0); //массив индексов обнуляется
}

int s=0,e=0,t=0;
if(start_idx==AI_WHOLEARRAY){
return(ArrayRange(aI,0)); //массив индексов не изменяется.
}

if(end_idx==AI_WHOLEARRAY){
e=ArrayRange(aI,0)-1;//самый большой индекс
}

int range=e-s+1;//количество элементов всего
ArrayResize(aT,range);

for(int i=0; i aT=aI[s+i];
}

ArrayResize(aI,range);
ArrayCopy(aI,aT,0,0,WHOLE_ARRAY);
return(range);
}
[/code]
МедальКубок
Сообщений: 536
Назад

AI_Swap


Меняет местами два индекса

[code=php]
void AI_Swap(int &aI[], int i=0, int j=0){
/**
\version 0.0.0.1
\date 2014.02.25
\author Morochin Artiom
\details Меняет местами два индекса
\internal
>Hist:
@0.0.0.1@2014.02.25@artamir [+] AI_Swap
>Rev:307
*/
string fn="AI_Swap";
int t=aI;
aI=aI[j];
aI[j]=t;
}
[/code]
МедальКубок
Сообщений: 536
Назад

AId_QuickSort2


Алгоритм сортировки "быстрая сортировка". По умолчанию сортируется 0-я колонка по возрастанию.

[code=php]
void AId_QuickSort2(double &a[][], int &aI[], int idx_min=-1, int idx_max=-1, int col=0, int mode=0){
/**
\version 0.0.0.1
\date 2014.02.25
\author Morochin Artiom
\details Алгоритм сортировки "быстрая сортировка". По умолчанию сортируется 0-я колонка
по возрастанию.
\internal
>Hist:
@0.0.0.1@2014.02.25@artamir [+] AId_QuickSort2
*/
static int count;
if(isNewQS)count=0;
count++;
maxQScount=MathMax(maxQScount,count);
string fn="Ad_QuickSort2";

if(ArrayRange(aI,0)<2){
return;
}

if(idx_min<0){idx_min=0;}
if(idx_max<0){idx_max=ArrayRange(aI,0)-1;}

int i=idx_min, j=idx_max;
int idx_pivot = MathRound((i+j)/2);
double pivot_value = (AId_get2(a,aI,i,col)+AId_get2(a,aI,j,col)+AId_get2(a,aI,idx_pivot,col))/3; //усредненное значение первого, последнего и среднего элемента массива.
while(i double vi=AId_get2(a,aI,i,col),vj=AId_get2(a,aI,j,col);
if(mode == AI_ASC){
while(AId_Compare(vi,pivot_value)==AI_LESS ){i++;}
while(AId_Compare(vj,pivot_value)==AI_GREAT){j--;}
}
if(mode == AI_DESC){
while(AId_Compare(vi,pivot_value)==AI_GREAT){i++;}
while(AId_Compare(vj,pivot_value)==AI_LESS ){j--;}
}
if(i AI_Swap(aI, i,j);i++;j--;
}
}
isNewQS=false;
if(i isNewQS=true;
isNewQS=false;
if(idx_min isNewQS=true;
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_QuickSearch2


Быстрый поиск в отсортированном массиве. Элементы заданной колонки двумерного массива должны быть сортированы по возрастанию.

[code=php]
int AId_QuickSearch2(double &a[][], int &aI[], int col=0, double element=0.0, int mode=AI_EQ){
/**
\version 0.0.0.3
\date 2014.02.26
\author Morochin Artiom
\details Быстрый поиск в отсортированном массиве.
\internal
>Hist:
@0.0.0.3@2014.02.26@artamir [+] Добавлен поиск любого меншего индекса.
@0.0.0.2@2014.02.26@artamir [+] Добавлен поиск любого большего индекса.
@0.0.0.1@2014.02.26@artamir [+] AId_QuickSearch2
>Rev:0
*/
string fn="AId_QuickSearch2";
int size=ArrayRange(aI,0);

if(size<=0)return(AI_NONE);

int l=0,r=size-1,m=l+(r-l)/2;

if(mode==AI_EQ){
while(l int c=AId_Compare(AId_get2(a,aI,m,col), element);
if(c==AI_GREAT){
r=m;
}else{
if(c==AI_LESS){
l=m+1;
}else{
l=m;
r=m;
}
}
m=l+(r-l)/2;
}

int c=AId_Compare(AId_get2(a,aI,r,col), element);
if(c==AI_EQ)return(r);
else return(AI_NONE);
}

if(mode==AI_GREAT){
while(l int c=AId_Compare(AId_get2(a,aI,m,col), element);
if(c==AI_GREAT){
r=m;
l=m;
}else{
l=m+1;
}
m=l+(r-l)/2;
}

int c=AId_Compare(AId_get2(a,aI,r,col), element);
if(c==AI_GREAT)return(r);
else return(AI_NONE);
}

if(mode==AI_LESS){
while(l int c=AId_Compare(AId_get2(a,aI,m,col), element);
if(c==AI_LESS){
r=m;
l=m;
}else{
r=m;
}
m=l+(r-l)/2;
}

int c=AId_Compare(AId_get2(a,aI,r,col), element);
if(c==AI_LESS)return(r);
else return(AI_NONE);
}
//------------------------------------------------
return(AI_NONE);
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_SearchFirst2


Поиск элемента с минимальным индексом и заданным значением.

[code=php]
int AId_SearchFirst2(double &a[][], int &aI[], int col=0, double element=0.0){
/**
\version 0.0.0.1
\date 2014.02.26
\author Morochin Artiom
\details Поиск самого первого совпадения.
\internal
>Hist:
@0.0.0.1@2014.02.26@artamir [] AId_SearchFirst2
>Rev:0
*/

string fn="AId_SearchFirst2";

int found_index=AId_QuickSearch2(a,aI,col,element,AI_EQ);
if(found_index==AI_NONE)return(AI_NONE);

int r=found_index;
while(r>=0&&AId_Compare(AId_get2(a,aI,r,col), element)==AI_EQ){
r--;
}

if(r<=-1)r=0;

while(AId_Compare(AId_get2(a,aI,r,col), element)!=AI_EQ){
r++;
}

return(r);
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_SearchLast2


Поиск элемента с максимальным индексом и заданным значением.
Если в массиве есть элементы с одинаковым значением, то будет выбран элемент с максимальным индексом.

[code=php]
int AId_SearchLast2(double &a[][], int &aI[], int col=0, double element=0.0){
/**
\version 0.0.0.1
\date 2014.02.26
\author Morochin Artiom
\details Поиск самого первого совпадения.
\internal
>Hist:
@0.0.0.1@2014.02.26@artamir [] AId_SearchLast2
>Rev:0
*/

string fn="AId_SearchLast2";

int found_index=AId_QuickSearch2(a,aI,col,element,AI_EQ);
if(found_index==AI_NONE)return(AI_NONE);

int size=ArrayRange(aI,0);

int l=found_index;
while(l l++;
}

if(l>=size)l=size-1;

while(l>=0&&AId_Compare(AId_get2(a,aI,l,col), element)!=AI_EQ){
l--;
}

return(l);
}

[/code]
МедальКубок
Сообщений: 536
Назад


AId_SearchGreat2



Поиск минимального индекса элемента, значение которого больше заданного.

[code=php]
int AId_SearchGreat2(double &a[][], int &aI[], int col=0, double element=0.0){
/**
\version 0.0.0.1
\date 2014.02.26
\author Morochin Artiom
\details Поиск первого сэлемента, большего чем заданный.
\internal
>Hist:
@0.0.0.1@2014.02.26@artamir [+] AId_SearchGreat2
>Rev:0
*/

string fn="AId_SearchGreat2";

int found_index=AId_QuickSearch2(a,aI,col,element,AI_GREAT);
if(found_index==AI_NONE)return(AI_NONE);

int r=found_index;
while(r>=0&&AId_Compare(AId_get2(a,aI,r,col), element)==AI_GREAT){
r--;
}

if(r<=-1)r=0;

while(AId_Compare(AId_get2(a,aI,r,col), element)!=AI_GREAT){
r++;
}

return(r);
}
[/code]
МедальКубок
Сообщений: 536
Назад

AId_SearchLess2


Поиск максимального индекса элемента со значением менее заданного.

[code=php]
int AId_SearchLess2(double &a[][], int &aI[], int col=0, double element=0.0){
/**
\version 0.0.0.1
\date 2014.02.26
\author Morochin Artiom
\details Поиск самого первого совпадения.
\internal
>Hist:
@0.0.0.1@2014.02.26@artamir [+] AId_SearchLess2
>Rev:0
*/

string fn="AId_SearchLess2";

int found_index=AId_QuickSearch2(a,aI,col,element,AI_LESS);
if(found_index==AI_NONE)return(AI_NONE);

int size=ArrayRange(aI,0);

int l=found_index;
while(l l++;
}

if(l>=size)l=size-1;

while(l>=0&&AId_Compare(AId_get2(a,aI,l,col), element)!=AI_LESS){
l--;
}

return(l);
}

[/code]
МедальКубок
Сообщений: 536
Назад

AIF_init


Очищение массива-фильтров.

[code=php]
void AIF_init(void){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Очищение массива-фильтров.
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AIF_init
>Rev:0
*/
ArrayResize(AIF_filter,0);
}

[/code]
МедальКубок
Сообщений: 536
Назад

AIF_addRow


Добавление новой строки к массиву-фильтру. Изменение размерности массива-фильтров. Возвращает индекс созданной строки.

[code=php]
int AIF_addRow(void){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Добавление новой строки к массиву-фильтру. Изменение размерности массива-фильтров. Возвращает индекс созданной строки.
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AIF_AddRow
>Rev:0
*/

string fn="AIF_addRow";
int t=ArrayRange(AIF_filter,0);
t++;
ArrayResize(AIF_filter,t);
t--;
return(t);
}
[/code]
МедальКубок
Сообщений: 536
Назад

AIF_filterAdd


Добавляет в массив-фильтров новую строку с переданными параметрами.

[code=php]
void AIF_filterAdd(int col, int aop=AI_EQ, double min=0, double max=0, int sop=AI_AND){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Добавляет в массив-фильтров новую строку с переданными параметрами.
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AIF_filterAdd
>Rev:0
*/

string fn="AIF_filterAdd";

int row=AIF_addRow();
AIF_filter[row][AIF_COL]=col;
AIF_filter[row][AIF_MIN]=min;
AIF_filter[row][AIF_MAX]=max;
AIF_filter[row][AIF_AOP]=aop;
AIF_filter[row][AIF_SOP]=sop;
}
[/code]
МедальКубок
Сообщений: 536
Назад

AIF_filterAdd_AND


Добавляет к массиву фильтров строку с соединением AND

[code=php]
void AIF_filterAdd_AND(int col, int aop=AI_EQ, double min=0, double max=0){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Добавляет к массиву фильтров строку с соединением AND
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AIF_filterAdd_AND
>Rev:0
*/
string fn="AIF_filterAdd_AND";
AIF_filterAdd(col, aop, min, max, AI_AND);
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_Select2


Выборка из двумерного массива по заданному массив-фильтров. После выполнения остается отобранный массив индексов.

[code=php]
void AId_Select2(double &a[][], int &aI[]){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Выборка из двумерного массива по заданному массив-фильтров. После выполнения остается отобранный массив индексов.
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AId_Select2
>Rev:0
*/

string fn="AId_Select2";
int filter_rows=ArrayRange(AIF_filter,0);

if(filter_rows<=0){
return; //Если массив-фильтров не задан, то выходим из процедуры.
}

for(int filter_idx=0; filter_idx int f_col=AIF_filter[filter_idx][AIF_COL];
int f_aop=AIF_filter[filter_idx][AIF_AOP];
double f_min=AIF_filter[filter_idx][AIF_MIN];
double f_max=AIF_filter[filter_idx][AIF_MAX];

//----------------------------------------------
//Далее отсортируем по возрастанию значение
//колонки f_col

AId_QuickSort2(a, aI, f_col);

int first=AI_NONE, last=AI_NONE;

if(f_aop==AI_EQ){
first=AId_SearchFirst2(a, aI, f_col, f_min);
last=AId_SearchLast2(a, aI, f_col, f_min);
}

if(f_aop==AI_GREAT){
first=AId_SearchGreat2(a,aI,f_col,f_min);
last=AI_WHOLEARRAY;
}

if(f_aop==AI_LESS){
first=0;
last=AId_SearchLess2(a,aI,f_col,f_min);
}

AI_setInterval(aI,first,last);
}
}

[/code]
МедальКубок
Сообщений: 536
Назад

AId_Print2


Печать в файл двумерного массива согласно массиву-индексов.

[code=php]
void AId_Print2(double &a[][], int &aI[], int d = 4, string fn = "AId_PrintArray_"){
/**
\version 0.0.0.1
\date 2014.02.28
\author Morochin Artiom
\details Печать в файл двумерного массива согласно массиву-индексов.
\internal
>Hist:
@0.0.0.1@2014.02.28@artamir [+] AId_Print2
>Rev:0
*/


static int i;

i++;
//------------------------------------------------------
int ROWS = ArrayRange(aI, 0);
int COLS = ArrayRange(a,1);

//------------------------------------------------------
fn = i+"_"+fn+".iar";

//------------------------------------------------------
int handle = FileOpen(fn, FILE_CSV|FILE_WRITE, "\t");
for(int idx_1 = 0; idx_1 < ROWS; idx_1++){
string s = "";
for(int idx_2 = 0; idx_2 < COLS; idx_2++){
s = StringConcatenate(s,"\t", "["+idx_1+","+aI[idx_1]+"]["+idx_2+"]",DoubleToStr(a[aI[idx_1]][idx_2], d));
}
FileWrite(handle, s);
}

if(handle != 0) FileClose(handle);

}

[/code]
МедальКубок
Сообщений: 536
Назад

Пример



Пример использования библиотеки sysIndexedArray.mqh

Данный пример реализован в виде скрипта.
Для билдов >=600

[code=php]
//+------------------------------------------------------------------+
//| sTest_sysIndexedArray.mq4 |
//| Copyright 2014, artamir |
//| http:\\forexmd.ucoz.org |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, artamir"
#property link "http:\\forexmd.ucoz.org"
#property version "1.00"
#property strict


#property stacksize 1024
#include
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double d[5][1];
for(int i=0;i<5;i++){
if(i==2||i==3)d[0]=2;
else d[0]=i;
}

Print("array{",0,",",1,",",2,",",2,",",4,"}");

int aI[];ArrayResize(aI,0);AId_Init2(d,aI);

Print("AId_SearchFirst2");
for(int i=-1;i<6;i++){
int j=AId_SearchFirst2(d,aI,0,i);
Print("val=",i,"->idx=",j);
}

Print("AId_SearchLast2");
for(int i=-1;i<6;i++){
int j=AId_SearchLast2(d,aI,0,i);
Print("val=",i,"->idx=",j);
}

Print("AId_SearchGreat2");
for(int i=-1;i<6;i++){
int j=AId_SearchGreat2(d,aI,0,i);
Print("val=",i,"->idx=",j);
}

Print("AId_SearchLess2");
for(int i=-1;i<6;i++){
int j=AId_SearchLess2(d,aI,0,i);
Print("val=",i,"->idx=",j);
}

Print("AId_Select2_EQ");
AId_Print2(d,aI,4,"all_array");
AIF_init();
AIF_filterAdd_AND(0,AI_EQ, 2);
AId_Select2(d,aI);
Print("AId_Print2");
AId_Print2(d,aI,4,"seleq2_array");

Print("AId_Select2_GREAT");
AId_Init2(d,aI);
AIF_init();
AIF_filterAdd_AND(0,AI_GREAT, 2);
AId_Select2(d,aI);
Print("AId_Print2");
AId_Print2(d,aI,4,"selgreat2_array");

Print("AId_Select2_LESS");
AId_Init2(d,aI);
AIF_init();
AIF_filterAdd_AND(0,AI_LESS, 2);
AId_Select2(d,aI);
Print("AId_Print2");
AId_Print2(d,aI,4,"selless2_array");
}
//+------------------------------------------------------------------+

[/code]
Прикрепленные файлы:
sTestsysIndexedArray_258o6.mq4 | 2.16 Кб | Скачали: 346
Редактировалось: 1 раз (Последний: 28 февраля 2014 в 20:27)
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад