PDA

View Full Version : Ръководство за ползване на платформата Meta Trader4



AngelD
26-04-2007, 10:14
Ръководство за ползване на платформата Meta Trader4 [attachmentid=221]

AngelD
08-06-2007, 11:15
Тук може да задавате въпроси свързани с платформата, как се настройва, как се използват различните инструменти и др.

haiko19
27-05-2008, 11:02
Здравейте,искам да пробвам реална търговия с експерти.Но има нещо,което не мога да разбера- след като прикача експерта към графиката,как да съм сигурен по кой модел работи- всички тикове,контролни точки и цени на отваряне.Защото резултатите от тестовете се различават при всеки модел.Знам,че не препоръчвате в книгата си реална търговия с експерти,но все пак искам да опитам и ако може,помогнете ми по този въпрос.Благодаря предварително!

vbanov
27-05-2008, 12:28
Цитат(haiko19 @ May 27 2008, 12:02 PM) 9587

Здравейте,искам да пробвам реална търговия с експерти.Но има нещо,което не мога да разбера- след като прикача експерта към графиката,как да съм сигурен по кой модел работи- всички тикове,контролни точки и цени на отваряне.Защото резултатите от тестовете се различават при всеки модел.Знам,че не препоръчвате в книгата си реална търговия с експерти,но все пак искам да опитам и ако може,помогнете ми по този въпрос.Благодаря предварително!


Здравейте,

тези модели са само за тестване на експертите. Когато го пуснете в реални условия той ще използва текущите данни и в съответствие с условията, които са му зададени ще открива позиции. Относно различията в резултатите от тестовете, при различните методи се използват различни цени При OHLC модела се използват само крайните стойности на един вече завършен бар. Докато при "всички тикове" се използва и ценовото движение изградило този бар. "всички тикове" е най-достоверен.

Nachenaesht
10-04-2009, 16:02
Здравейте, има сходен въпрос като на колегата преди мен. Когато тествам даден експерт и променям времевите фреймове, на които да работи получавам различни резултати. Да предположим, че на определен фрейм дава най-добри резултати. Въпросът ми е как се настройват фреймовете, на които да работи експерта, когато се прикачи към графиката и се стартира работата му? Благодаря предварително! Поздрави!

vbanov
13-04-2009, 11:11
Здравейте, има сходен въпрос като на колегата преди мен. Когато тествам даден експерт и променям времевите фреймове, на които да работи получавам различни резултати. Да предположим, че на определен фрейм дава най-добри резултати. Въпросът ми е как се настройват фреймовете, на които да работи експерта, когато се прикачи към графиката и се стартира работата му? Благодаря предварително! Поздрави!

Здравейте,

Експертът работи на графиката, на която е прикачен. Например ако Ви дава най-добри резултати на евро/долар Daily, отваряте тази графика и на нея атачвате експерта. По този начин експерта ще работи на точно тази дневна графика на евро/долар.

Nachenaesht
16-04-2009, 10:42
Благодаря за отговора! Успех на всички!

Nachenaesht
26-05-2009, 16:02
Здравейте, Г-н Банов! Обръщам се към Вас, тъй като предполагам, че вие ще ми отговорите. Имам следния проблем: Ползвам един експерт като съветник. За да не го следя постоянно ми се иска да му поставя в кода опцията да известява със звуков сигнал всеки път когато отваря или затваря позиция. Нямям понятие от MQL4 програмиране. Това което разбрах от беглото ми запознаване с материята е, че се използва функция PlaySound и че не се получава с налучкване, а трябва да знам какво правя. Одолу публикувам кода на есперта. Ако някой знае къде и как да се направи, ще му бъда благодарен. Успех на всички!


//+------------------------------------------------------------------+
//| FT_BillWillams_Trader.mq4 |
//| FORTRADER.RU |
//| http://FORTRADER.RU |
//+------------------------------------------------------------------+
#property copyright "FORTRADER.RU"
#property link "http://FORTRADER.RU"

extern string FT1="------Настройки фрактала:----------";
extern int CountBarsFractal=5;//количество баров из которых состоит фрактал
extern int ClassicFractal=1; //включение выключение классического паттерна
extern int MaxDistance=1000;//включение контроля расстояния от зеленой линии до точки входа
extern string FT2="------Настройки типа пробоя фрактала:----------";
extern int indent=1; //количество пунктов для отступа от максимума и минимума
extern int TypeEntry=2; //тип входа после пробоя фрактала 1 - на текущем баре 2 - на баре закрытия 3 на откате к точке входа после пробоя
extern int RedContol=1; //контролировать находится ли пробойная цена выше ниже уровня красной линии
extern string FT3="------Настройки аллигатора:----------";
extern int jaw_period=13; // - Период усреднения синей линии (челюсти аллигатора).
extern int jaw_shift=8; // - Смещение синей линии относительно графика цены.
extern int teeth_period=8; // - Период усреднения красной линии (зубов аллигатора).
extern int teeth_shift=5; // - Смещение красной линии относительно графика цены.
extern int lips_period=5; // - Период усреднения зеленой линии (губ аллигатора).
extern int lips_shift=3; // - Смещение зеленой линии относительно графика цены.
extern int ma_method=0; //- от 0 до 3 метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
extern int applied_price=4; // - от 0 до 6 - Используемая цена. Может быть любой из ценовых констант.
extern string FT4="-------Настройки контроля тренда по аллигатору:----------";
extern int TrendAligControl=0; // включение контроля тренда по алигатору
extern int jaw_teeth_distense=10; //разница между зеленой и красной
extern int teeth_lips_distense=10;//разница между красной и синией
extern string FT5="-------Настройки контроля закрытия сделки:----------";
extern int CloseDropTeeth=2; //Включение закрытия сделки при косании или пробое челюсти. 0 - отключение 1 - по касанию 2 по закрытию бара
extern int CloseReversSignal=2;//Включение закрытия сделки при 1- образовании обратного фрактала 2 - при срабатывании обратного фрактала 0 выключено
extern string FT6="-------Настройки сопровождения StopLoss сделки:----------";
extern int TrailingGragus=1; //Включение трейлинг стопа по ценовому градусу наклона, если сильный угол то трейлинг по зеленой, если малый угол то трейлинг по красной
extern int smaperugol=5;
extern int raznica=5;
extern string FT7="-------Настройки StopLoss и TakeProfit ибьема сделки:----------";
extern double StopLoss=50;
extern double TakeProfit=50;
extern double Lots=0.1;

int start()
{

ClassicFractal();
return(0);
}
double oldopb,opb,ops,oldops, otkatb,otkats;
int fractalnew,vpravovlevo,numsredbar,colish;

int ClassicFractal()
{ int buy,sell;double sl,tp;


//управление позами
ClassicFractalPosManager();

buy=0;sell=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY ){buy=1;}
if(OrderType()==OP_SELL ){sell=1;}
}

//найдем скоьлко смотреть вправо и в лево
vpravovlevo=(CountBarsFractal-1)/2;
numsredbar=(CountBarsFractal-vpravovlevo);
colish=numsredbar-1;

/*----------------------------------------ПОКУПКА------------------------------------------*/

//найдем фрактал на покупку
if(High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)] && (RedContol(Close[1],0)==true && RedContol==1))
{
opb=NormalizeDouble(High[numsredbar]+indent*Point,4);

}
//проверка входа на касании или по закрытию бара
if(buy==0&& ((Ask>opb && TypeEntry==1 ) || (Close[1]>opb && TypeEntry==2))
&& opb!=oldopb && MaxDistance(opb)==true && opb>0
&& ((RedContol(Close[1],0)==true && RedContol==1) || RedContol==0)
&& ((TrendAligControl(0)==true && TrendAligControl==1) || TrendAligControl==0))
{oldopb=opb;
sl=NormalizeDouble(Ask-StopLoss*Point,4);
tp=NormalizeDouble(Ask+TakeProfit*Point,4);
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"FORTRADER.RU",16384,10,Green);
PlaySound("alert.wav");
}

/*------------------------------------------ПРОДАЖА----------------------------------------*/

//найдем фрактал на продажу
if(Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)] && (RedContol(Close[1],1)==true && RedContol==1) )
{
ops=NormalizeDouble(Low[numsredbar]-indent*Point,4);


}
//проверка входа на касании или по закрытию бара
if(sell==0&& ( (Bid<ops && TypeEntry==1) || (Close[1]<ops && TypeEntry==2))
&& oldops!=ops && MaxDistance(ops)==true
&& ((RedContol(Close[1],1)==true && RedContol==1) ||RedContol==0)
&& ((TrendAligControl(1)==true && TrendAligControl==1) || TrendAligControl==0))
{
oldops=ops;
sl=NormalizeDouble(Bid+StopLoss*Point,4);
tp=NormalizeDouble(Bid-TakeProfit*Point,4);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"FORTRADER.RU",16384,10,Green);
PlaySound("alert.wav");
}


return(0);
}

bool MaxDistance(double entryprice)
{

double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);

if(MathAbs(entryprice-lips)<MaxDistance*Point){return(true);}
return(false);
}

bool RedContol(double entryprice,int type)
{

double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);

if(entryprice>teeth && type==0){return(true);}
if(entryprice<teeth && type==1){return(true);}
return(false);
}

bool TrendAligControl(int type)
{

double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);
double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);
double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1);


if(type==0 && lips-teeth>teeth_lips_distense*Point && teeth-jaw>jaw_teeth_distense*Point ){return(true);}
if(type==1 && teeth-lips>teeth_lips_distense*Point && jaw-teeth>jaw_teeth_distense*Point ){return(true);}


return(false);
}

int ClassicFractalPosManager()
{int i,buy,sell;
double jaw=iMA(NULL,0,jaw_period,jaw_shift,ma_method,applied_price,1);
double teeth=iMA(NULL,0,teeth_period,teeth_shift,ma_method,applied_price,1);
double lips=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,1);
double lipsl=iMA(NULL,0,lips_period,lips_shift,ma_method,applied_price,2);
double sma=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,1);
double smal=iMA(NULL,0,smaperugol,0,MODE_SMA,PRICE_CLOSE,2);

buy=0;sell=0;
for( i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY ){buy=1;}
if(OrderType()==OP_SELL ){sell=1;}
}

for( i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && ((CloseDropTeeth==1 && Bid<=jaw ) || (CloseDropTeeth==2 && Close[1]<=jaw )))
{
OrderClose(OrderTicket(),Lots,Bid,3,Violet);
PlaySound("ok.wav");
return(0);
}
}

if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY &&
((CloseReversSignal==1 && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,numsredbar+1)] && Low[numsredbar]<Low[iLowest(NULL,0,MODE_LOW,colish,0)] )
||(CloseReversSignal==2 && sell==1 )))
{
OrderClose(OrderTicket(),Lots,Bid,3,Violet);
PlaySound("ok.wav");
return(0);
}
}

if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl>sma-smal && OrderProfit()>0)
{
if(OrderStopLoss()<lips)
{
OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
return(0);
}
}
}


if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && TrailingGragus==1 && lips-lipsl<=sma-smal && OrderProfit()>0)
{
if(OrderStopLoss()<teeth || lips>teeth)
{
OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
return(0);
}
}
}

if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_SELL && ((CloseDropTeeth==1 && Ask>=jaw ) || (CloseDropTeeth==2 && Close[1]>=jaw )))
{
OrderClose(OrderTicket(),Lots,Ask,3,Violet);
PlaySound("ok.wav");
return(0);
}
}

if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_SELL && ((CloseReversSignal==1 && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,numsredbar+1)] && High[numsredbar]>High[iHighest(NULL,0,MODE_HIGH,colish,1)])
|| (CloseReversSignal==2 && buy==1 )))
{
OrderClose(OrderTicket(),Lots,Ask,3,Violet);
PlaySound("ok.wav");
return(0);
}
}


if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips<smal-sma && OrderProfit()>0)
{
if(OrderStopLoss()>lips)
{
OrderModify(OrderTicket(),OrderOpenPrice(),lips,OrderTakeProfit(),0,White);
return(0);
}
}
}


if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
if(OrderType()==OP_SELL && TrailingGragus==1 && lipsl-lips>smal-sma && OrderProfit()>0)
{
if(OrderStopLoss()>teeth || lips<teeth)
{
OrderModify(OrderTicket(),OrderOpenPrice(),teeth,OrderTakeProfit(),0,White);
return(0);
}
}
}

}


}

vbanov
27-05-2009, 14:13
Здравей,

C:\Program Files\MetaTrader 4\sounds - обикновенно така изглежда пътя до звуковите файлове в МТ. Избираш си един например alert.wav и правиш следното:

под всеки ред, който говори за отваряне или затваряне на сделка слагаш

PlaySound("alert.wav");

важно е да бъде точно под този ред, да не излиза извън {}

например:

{
OrderClose(OrderTicket(),Lots,Ask,3,Violet);
PlaySound("alert.wav");
return(0);
}

или

{
oldops=ops;
sl=NormalizeDouble(Bid+StopLoss*Point,4);
tp=NormalizeDouble(Bid-TakeProfit*Point,4);
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"FORTRADER.RU",16384,10,Green);
PlaySound("alert.wav");
}

Nachenaesht
27-05-2009, 18:12
Благодаря за бързия отговор. Направих това, което ми казахне, но се появи един проблем. След сигнала за отваряне на поръчката (аз сложих на всяко място, където има звуков сигнал различен звук) на всеки тик до затварянето й се чува сигнал за затваряне. Може би трябва още нещо да се допише, за да отсява сигналите и да подава звуков сигнал само, когато се затваря поръчката.

Поздрави!

vbanov
28-05-2009, 13:17
има много OrderModify ако е сложен PlaySound при тях това може да е причината

Nachenaesht
28-05-2009, 13:54
Сложих само на OrderClose. На OrderModify, не съм. Явна всеки тик минава през преценката на някой OrderClose и това активира звуковия сигнал или поне аз така си го обяснявам.

vbanov
28-05-2009, 14:58
би ли едитнал горе твоя код или да го пуснеш отново с добавените playsound

Nachenaesht
29-05-2009, 09:35
Горе добавих редовете, които вкарах в експерта. Принципно на всеки ред сложих различен звуков сигнал, за да разбера да не съм допуснал грешка в някой конкретен ред. При различните поръчки (buy и sell) се задействаше различен сигнал за Close и се издава на всеки тик.

Nachenaesht
29-05-2009, 10:46
Във форума http://forum.mql4.com/ru/8209/page2 намерих следният вариант на запис за сигнал (явно и някакво съобщение) при затваряне на поръчката. Може би този if отсява сигналите за close.


//---- закрываем позицию
{
if((OrderClose( OrderTicket(), OrderLots(),
Bid, 5, Green ) )!=false)
{
Alert( "BuyOrderClose № ",OrderClosePrice() );
SendMail(NameExpert, "BuyOrderClose");
PlaySound(NameSound);
}

else
{
Alert( "Ошибка BuyOrderClose № ",() );

}
}
return(0);

}

vbanov
29-05-2009, 11:09
Това е демонстрация на няколко различни алерт-а, които могат да се ползват, като пращане на мейл и др.
Мисля, че няма нужда от if в този случай.

Toshko_A
30-05-2009, 16:04
Това е демонстрация на няколко различни алерт-а, които могат да се ползват, като пращане на мейл и др.

:) Това НЕ Е демонстрация на няколко различни алерт-а.

Nachenaesht (http://forum.fxservice.com/member.php?u=6176), сложи си едно

Sleep(3000);

примерно след всеки PlaySound и не се занимавай с глупости.

vbanov
01-06-2009, 15:02
Nachenaesht, пробвай да замениш навсякъде PlaySound s Print("1"); , Print("2"); , Print("3"); ... и виж какво ще получиш

Toshko_A
01-06-2009, 18:45
:) Nachenaesht, ще има още доста работи да пробваш докато местните сътрудници на Адмирал Маркетс научат MQL.
Ух да му се невиди и пущината! Де да му разбираше човек - можеше и едно курсче " Пазарно Програмиране " да му спретне, ама нейсе ... Пък и скоро щял да излиза MQL5 и всичко това дето си го събирал за MQL4 ще отиде в кофата - един вид рестартират цялото натрупано ноу хау за автоматизирана търговия с Метатрайдър, ама както всичко друго и това не става случайно ;)

vbanov
02-06-2009, 10:06
Nachenaesht, не обръщай внимание на заяжданията на г-н А. Важното е да си решиш проблема, затова ако все още съществува - пиши.

vbanov
03-06-2009, 09:18
Nachenaesht, пробвай с това решение на проблема


int Ticket; // SK

/*----------------------------------------ПОКУПКА------------------------------------------*/
{
Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"FORTRADER.RU",16384,10,Green);
if (Ticket > 0) // SK
PlaySound("ok.wav");
}

/*------------------------------------------ПРОДАЖА----------------------------------------*/
{
Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"FORTRADER.RU",16384,10,Green);
if (Ticket > 0) // SK
PlaySound("ok.wav");
}
return(0);


//------------------------------------------------------------------------------------------------


bool Answer = false; // SK

{
Answer = OrderClose(OrderTicket(),Lots,Bid,3,Violet);
if (Answer == true)
PlaySound("ok.wav");
return(0);
}

{
Answer = OrderClose(OrderTicket(),Lots,Bid,3,Violet);
if (Answer == true)
PlaySound("ok.wav");
return(0);
}

{
Answer = OrderClose(OrderTicket(),Lots,Ask,3,Violet);
if (Answer == true)
PlaySound("ok.wav");
return(0);
}

{
Answer = OrderClose(OrderTicket(),Lots,Ask,3,Violet);
if (Answer == true)
PlaySound("ok.wav");
return(0);
}


//----------------------------------------------------------------------------------------------------

Бих искал да внеса едно уточнение за теб и за всички други, които биха ползвали този код.

Трябва да се вземе впредвид, че този код на експерта може да е предмет на интелектуална собственост на неговия автор.

Никой от нас не е изпробвал този експерт, не сме проверявали как работи на исторически данни или в реална търговия. Не можем да се ангажираме с препоръка дали този експерт да се ползва или не. Преди да се започне автоматизирана търговия, човек трябва да е наясно с предимствата и недостатъците на подобен тип търговия. Всеки самостоятелно и на собствен риск решава дали да използва този експерт!

vbanov
03-06-2009, 09:39
Предложението за кода е дело на Сергей Ковальов - сътрудник в проекта MQLabs на Адмирал Маркетс.

Който е заитересован, може да чете статии на подобна тематика на този адрес http://www.forextrade.ru/mqlabs/articles . За момента са само на руски език, при първа възможност ще преведем няколко от статиите и ще ги качим на сайта.

Nachenaesht
05-06-2009, 11:10
Не съм този, който ще съди кой прав, кой крив, защото аз най-малко разбирам. Затова ще Ви пиша какво се получи от експериментите.
Добавянето на Sleep(3000); не промени нищо. Сигналите за close продължиха да звучат през няколко секунди;
Когато замених PlaySound с Print() се получиха странни резултати, които обясниха всичко;
Когато правя експериментите стартирам експерта на няколко валутни двойки, за да не чакам дълго да се отвори поръчка. Оказа се обаче, че експерта не работи както трябва когато е пуснат на няколко двойки едновермено. Когато отвори поръчка на някоя от двойките то започва да дава сигнали за затваряне на другите двойки, въпреки че на тях може да няма отворена поръчка. Така че проблемът се реши по първоначалният начин с PlaySound, като експерта се пуска да работи само с една двойка.

Благодаря много за помощта. Желая Ви успех.

Toshko_A
05-06-2009, 18:35
:)
Здравй, Nachenaesht.
Трябваше с това да почнеш - че проблема се появява когато пуснеш експерта на няколко валутни двойки. Това ме накара да ти разгледам по - добре кода на експерта. Проблемите в кода са следните :
1. Нямаш възможност да променяш MagicNumber - това е число, което се залепва като атрибут за поръчката и прябва да е различно за всяка валутна двойка, за която закачаш експерта. В този вариант на експерта това число е фиксирано на 16384 и не ти е дадена възможност да го промениш.
2. При избор на поръчка за затваряне не се проверява нито за MagicNumber нито за OrderSymbol(). Това трябва да се добави в кода на експерта.
Промените са елементарни. Нашите юнаци сигурно вече са задействали Г-н Ковальов пък и да не са - доста подробен жокер им дадох - ако си напънат малко мозъците ( въпреки, че няма кой да им аплати 396 лв. за това ) може да се справят и сами :)
Айде, че жаната тук пак ми прави проблеми ;)

Поздрави!

Nachenaesht
08-06-2009, 14:25
И аз самият се изненадах, че проблема може да е от това, но така или иначе сам нямаше да го оправя. Благодаря на всички за помощта.

Nachenaesht
30-07-2009, 14:23
Здравейте, появи ми се следния проблем: Посредникът, който ползвах премина в режим на работа No Dealing Desk. Тоест търговията се осъществява без рекотиране. Също така от 4 знака след точката премина на 5. В следствие на това експертът, който ползвах за ориентир не иска да работи коректно. Тоест подава сигнал за откриване на позиция (звуков и текстови), но не отваря сделка. Когато я отворя ръчно до закриването и работи коректно, т. е. проблемът е в откриването на позициите.
Разговарях с посредника и според тях проблемът е в липсата на рекотиране. Наставало някакво объркване при разминаването в заявената и пазарната цена, и поставянето на стоп лос и тейк профит правило накакъв проблем, поради което не се отваряла поръчката. Друго обяснение било да не е настроен на търговия с 5 знака.
Ако някой има някаква представа, къде може да е проблема и как може да се реши, ще му бъда благодарен да сподели. Кодът на експерта съм го публикувал преди време по-горе в сащата тема. Благодаря предварително!