Вопросы и Ответы Прграммистам по MQL 4 - страница 4

 

Пока только вот так:

//+------------------------------------------------------------------+

//| Торговля по Фибо.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#property copyright "Minodi"

#property link "minodi@yandex.ru"


extern int period_EMA = 233,

period_SMA = 233,

stoploss = 30,

extern double Lot = 0.01;

extern string SesEnd ="22:00"; //граничное время для Хая или Лоу

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//------- Дневные цены, Фибы и время отрисовки Хай-Лоу--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); // цена Хая

double LoPrice = iLow (NULL,1440,shift); // цена Лоу

double OpPrice = iOpen (NULL,1440,shift); // цена Открытия

double ClPrice = iClose (NULL,1440,shift); // цена Закрытия

datetime StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen (NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPrice-LoPrice;

double Fibo138 =1.382*Range+LoPrice;

double Fibo162 =1.618*Range+LoPrice;

double Fibo_138 =LoPrice-(1.382*Range-Range);

double Fibo_162 =LoPrice-(1.618*Range-Range);

//----------------время хая и лоу-----------------------------------------+

int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("На этом баре:"+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

if (currDay!=TimeDay(Time[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

double MaxDay = x - LoPrice; // ценовой диапазон Демарка

double MinDay = x - HiPrice; // ценовой диапазон Демарка

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------Удаление вчерашних ордеров---------------------------------+

//------------------Ордера----------------------------------------------------+

 

уважаемые форумчане проверьте код, постепенно планирую добавлять

 

Вот эти параметры ято я давал, поместите перд стартом


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
Здравствуйте, уважаемые программисты! Подскажите новичку, как написать, если это возможно, скрипт (не советник), чтобы он выставлял торговый ордер и одновременно включал для него функцию Трейлинг стопа на минимальном уровне. Возможно есть готовый, тогда если можно - ссылку.
 
Vladon >>:

Вот эти параметры ято я давал, поместите перд стартом


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


Переместил. А все остальное в норме?
 

Уважаемые форумчане уделите Ваше внимание и скажите о допущенных ошибках:

//+------------------------------------------------------------------+

//| Торговля по Фибо.mq4 |

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#property copyright "Minodi"

#property link "minodi@yandex.ru"


extern int period_EMA = 233,

period_SMA = 233,

stoploss = 30,

Magic = 55;

extern double Lot = 0.01;

extern string SesEnd ="22:00"; //граничное время для Хая или Лоу


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//------- Дневные цены, Фибы и время отрисовки Хай-Лоу--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); // цена Хая

double LoPrice = iLow (NULL,1440,shift); // цена Лоу

double OpPrice = iOpen (NULL,1440,shift); // цена Открытия

double ClPrice = iClose (NULL,1440,shift); // цена Закрытия

datetime StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*Sunday*/)

{//Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen (NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPrice-LoPrice;

double Fibo138 =1.382*Range;

double Fibo162 =1.618*Range;

double Fibo_138 =(LoPrice-1.382*Range)-Range;

double Fibo_162 =(LoPrice-1.618*Range)-Range;

//----------------время хая и лоу-----------------------------------------+


if (time!=Time[0]){HiTime=0;LoTime=0;time=Time[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (Low[0]<LoPrice)LoTime=TimeCurrent();


Comment("На этом баре:"+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

if (currDay!=TimeDay(Time[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

i++;

}

double MaxDay = x - LoPrice; // ценовой диапазон Демарка

double MinDay = x - HiPrice; // ценовой диапазон Демарка

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//------------------Ордера----------------------------------------------------+

if (HiTime>LoTime){

int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime<LoTime){

int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);

int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime>LoTime && ClPrice>Pivot) {

int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);

}

if (HiTime<LoTime && ClPrice<Pivot)

int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);

}

return(0);


//+------------------------------------------------------------------+


 

на первый взгял вынес параметры:

int currDay;


за старт

 
Забыл про стопы, поставил в 30 пп
 
Укажите на ошибки, хочу что б код работал
 

Господа форумчанe, помогитe разобраться....

Привожу часть кода (основной код зят из учeбника по построeнию обычного экспeрта)

// Функция учёта ордеров
// Глобальные переменные:
// Mas_Ord_New[31][9] // Массив ордеров последний известный
// Mas_Ord_Old[31][9] // Массив ордеров предыдущий (старый)
// 1й индекс = порядковый номер ордера
// [][0] не определяется
// [][1] курс откр. ордера (абс.знач.курса)
// [][2] StopLoss ордера (абс.знач.курса)
// [][3] TakeProfit ордера (абс.знач.курса)
// [][4] номер ордера
// [][5] колич. лотов орд. (абс.знач.курса)
// [][6] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] магическое число ордера
// [][8] 0/1 факт наличия комментария

if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[old][4]); // Значит Ордер Buy закрыт встрeчным сигналом
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]); // значит сработал СЛ
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // сработал ТП

else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // Значит Ордер Sell закрыт встрeчным сигналом
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]); // значит сработал СЛ
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // сработал ТП

Остальная часть нe интeрeсуeт...

Проблeма: В 90% случаeв выдаeтся правильный парамeтр на отображeниe? т.e. eсли SL сработал, то парамeтр "19" на выходe, eсли ТР - "20", eсли ордeр закрыт вручную, или встрeчным сигналом, то "1" или"2". Так и задумывалось...

А иногда (довольн часто), вмeсто "20" выдаeт"19" (или наоборот), а то и "1"("2"). Помогитe правильно описать функцию "if" : как условия срабатывания причин закрытия ордeров.

Думаю, можeт причина в округлeнии цeн ?

Причина обращения: