Antton86 : 도와주세요. SL과 TP와 지표(Stochastic) 및 필터(MA)의 매개변수를 변경할 수 있는 조언자가 필요합니다. 빠른 선을 넘는 BUY 신호는 SELL 하락의 경우 느려집니다. 거래는 MA 방향으로 수행됩니다! 어드바이저가 복잡하지도 않고 별로 흥미롭지도 않은건 알겠는데 데이터베이스에 있는 어드바이저들을 다 훑어본 결과 비슷한거 못찾았어요! 나는 나 자신을 쓰려고 노력했다 - 3 일 동안 빈 (((
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoy magik number. privoju kod chtobi posmotreli v chem prichna i eshe dorobotali vzyali nailuchie svyazki indikatorov
#property copyright "Armen Alaverdyan"#property link "bravolc@mail.ru"externdouble PercentProfit = 0.15 ; // Процент профитаexterndouble PercentLoss = 100 ; // Процент убыткаexternbool DeleteOrders = False; // Удалять ордераexternbool CloseTerminal = False; // Закрывать терминалexternbool ShowComment = True; // Показывать комментарийexternint NumberAccount = 0 ; // Номер торгового счётаexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav" ; // Наименование звукового файлаexternint Slippage = 3 ; // Проскальзывание ценыexternint NumberOfTry = 5 ; // Количество попытокexternint PauseAfterError = 75 ; // Пауза после ошибки в секундахexterndouble maxsimum_Lots= 0.3 ;
externint rsi_period= 22 ;
externdouble MATrendPeriod= 26 ;
externdouble MACDOpenLevel= 3 ;
externdouble MACDCloseLevel= 2 ;
//---- input parametersexterndouble Lots= 0.1 ;
externint StLoss= 200 ;
externint TPrfit= 100 ;
externstring Times= "H1" ;
externint TrailingStop= 11 ;
externint MagicNumber = 15031963 ;
//------- Глобальные переменные советника --------------------------------------bool gbDisabled = False; // Флаг блокировки советникаcolor clCloseBuy = Blue ; // Цвет значка закрытия покупкиcolor clCloseSell = Red ; // Цвет значка закрытия продажиcolor clDelete = Yellow ; // Цвет значка удаления ордеров//------- Поключение внешних модулей -------------------------------------------#include <stdlib.mqh>#include <WinUser32.mqh>//===================================================================================================externint MaxOrders= 100 ;
externint n= 5 ; //minuta startadouble lava_aper;
double LotsOptimized() {
lava_aper = NormalizeDouble (AccountFreeMargin() * Lots / 10000.0 , 1 );
if (lava_aper < Lots) lava_aper = Lots;
if (lava_aper > maxsimum_Lots) lava_aper = Lots;{
return (lava_aper);
}
}
Print ( "Свободная маржа счета = " ,AccountFreeMargin());
Print ( "Баланс счета = " ,AccountBalance());
Print ( " Средства = " ,AccountEquity());
int Tick;
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
for ( int cnt= 0 ;cnt< OrdersTotal ();cnt++)
{
OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()== Symbol ())
{
if (OrderType()==OP_BUY)
{
if (TrailingStop> 0 && Bid-OrderOpenPrice()> Point *TrailingStop && (OrderStopLoss()<Bid- Point *TrailingStop|| OrderStopLoss()== 0 ))
{
OrderModify(OrderTicket(),OrderOpenPrice(),
Bid- Point *TrailingStop,OrderTakeProfit(), 0 );
}
}
if (OrderType()==OP_SELL)
{
if (TrailingStop> 0 && OrderOpenPrice()-Ask> Point *TrailingStop && (OrderStopLoss()>Ask+ Point *TrailingStop || OrderStopLoss()== 0 ))
{
OrderModify(OrderTicket(),OrderOpenPrice(),
Ask+ Point *TrailingStop,OrderTakeProfit(), 0 );
}
}
}
}
Comment ( "lava_aper= " ,lava_aper,
"TrailingStop= " ,TrailingStop, "StopLoss= " ,StLoss,
"TakeProfit= " ,TPrfit,
" Средства = " ,AccountEquity(),
"AccountBalance()= " ,AccountBalance(),
"AccountFreeMargin()= " ,AccountFreeMargin() );
double bull= 0 ,bear= 0 ;
bull = iBullsPower ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
bear = iBearsPower ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
// Comment("bull+bear= ",bull + bear,"\n I Blue "); double SignalPrevious, MaCurrent, MaPrevious;
MaCurrent= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 0 );
MaPrevious= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 1 );
double MacdCurrent, MacdPrevious, SignalCurrent;
MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 );
SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 );
SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 );
double rsi17_0 = NormalizeDouble ( iRSI ( Symbol (), PERIOD_H1 , rsi_period, 0 , 0 ), Digits );
double rsi17_1 = NormalizeDouble ( iRSI ( Symbol (), PERIOD_H1 , rsi_period, 3 , 3 ), Digits );
if (Minute() == n
&& ( iDeMarker ( NULL , 0 , 14 , 2 )< 0.49 )
&&( iDeMarker ( NULL , 0 , 14 , 0 )> 0.49 )
//&& rsi17_1<rsi17_0//&& Open[1] < Close[1]
&& Tick == 0//&& (bull + bear > 0)
&& MacdCurrent< 0//&& MacdCurrent>SignalCurrent //&& MacdPrevious<SignalPrevious //&& MathAbs(MacdCurrent)>(MACDOpenLevel*Point)//&& MaCurrent>MaPrevious
)
{
OrderSend ( Symbol (),OP_BUY,LotsOptimized(),Ask, 0 ,Ask - StLoss* Point ,Ask + TPrfit* Point , "" ,MagicNumber, 0 , CLR_NONE );
Tick++;
return ( 0 );
}
if (Minute() == n
&& ( iDeMarker ( NULL , 0 , 14 , 2 )> 0.51 )
&&( iDeMarker ( NULL , 0 , 14 , 0 )< 0.51 )
//&& (bull + bear < 0) //&& rsi17_1>rsi17_0//&& Open[1] > Close[1]
&& Tick == 0
&& MacdCurrent> 0//&& MacdCurrent<SignalCurrent //&& MacdPrevious>SignalPrevious //&& MathAbs(MacdCurrent)>(MACDOpenLevel*Point)//&& MaCurrent<MaPrevious
)
{
OrderSend ( Symbol (),OP_SELL,LotsOptimized(),Bid, 0 ,Bid + StLoss* Point ,Bid - TPrfit* Point , "" ,MagicNumber, 0 , CLR_NONE );
Tick++;
return ( 0 );
}
if ( OrdersTotal () <= MaxOrders) { //1//----if (Minute() == 59 )
{
Tick = 0 ;
}
}
if (AccountEquity()>=AccountBalance()*( 1 +PercentProfit/ 100 )
|| AccountEquity()<=AccountBalance()*( 1 -PercentLoss / 100 )) {
ClosePosFirstProfit();
DeleteOrders();
}
}
//+----------------------------------------------------------------------------+//| |//| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ |//| |//+----------------------------------------------------------------------------+//| Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pAsk, pBid, pp;
int err, it;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it= 1 ; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
while (!IsTradeAllowed()) Sleep ( 5000 );
RefreshRates();
pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
pBid=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pBid; clClose=clCloseBuy;
} else {
pp=pAsk; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound (NameFileSound); break ;
} else {
err= GetLastError ();
if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 *PauseAfterError);
Print ( "Error(" ,err, ") Close " ,GetNameOP(OrderType()), " " ,
ErrorDescription(err), ", try " ,it);
Print (OrderTicket(), " Ask=" ,pAsk, " Bid=" ,pBid, " pp=" ,pp);
Print ( "sy=" ,OrderSymbol(), " ll=" ,ll, " sl=" ,OrderStopLoss(),
" tp=" ,OrderTakeProfit(), " mn=" ,OrderMagicNumber());
Sleep ( 1000 *PauseAfterError);
}
}
} elsePrint ( "Некорректная торговая операция. Close " ,GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+//| Закрытие позиций по рыночной цене сначала прибыльных |//+----------------------------------------------------------------------------+void ClosePosFirstProfit() {
int i, k= OrdersTotal ();
// Сначала закрываем прибыльные позицииfor (i=k- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (OrderProfit()+OrderSwap()> 0 ) ClosePosBySelect();
}
}
}
// Потом все остальные
k= OrdersTotal ();
for (i=k- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}
}
if (CloseTerminal && !ExistPositions()) CloseTerminal();
}
//+----------------------------------------------------------------------------+//| Закрывает торговый терминал. |//+----------------------------------------------------------------------------+void CloseTerminal() {
Print ( "Сработала функция CloseTerminal()" );
int hwnd=WindowHandle( Symbol (), Period ());
int hwnd_parent= 0 ;
while (! IsStopped ()) {
// hwnd=GetParent(hwnd);if (hwnd== 0 ) break ;
hwnd_parent=hwnd;
}
if (hwnd_parent!= 0 ) PostMessageA(hwnd_parent, WM_CLOSE, 0 , 0 );
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Удаление ордеров |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
bool fd;
int err, i, it, k= OrdersTotal (), ot;
if (sy== "0" ) sy= Symbol ();
for (i=k- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot> 1 && ot< 6 ) {
if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ot==op)) {
if (mn< 0 || OrderMagicNumber()==mn) {
for (it= 1 ; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
while (!IsTradeAllowed()) Sleep ( 5000 );
fd=OrderDelete(OrderTicket(), clDelete);
if (fd) {
if (UseSound) PlaySound (NameFileSound); break ;
} else {
err= GetLastError ();
Print ( "Error(" ,err, ") delete order " ,GetNameOP(ot), ": " ,ErrorDescription(err), ", try " ,it);
Sleep ( 1000 * 5 );
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Возвращает флаг существования позиций |//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
int i, k= OrdersTotal ();
if ( StringLen (sy)== 1 && StringGetChar(sy, 0 )== 48 ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy== "" ) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op< 0 || OrderType()==op) {
if (mn< 0 || OrderMagicNumber()==mn) return (True);
}
}
}
}
}
return (False);
}
//+----------------------------------------------------------------------------+//| Возвращает наименование операции |//+----------------------------------------------------------------------------+string GetNameOP( int op) {
switch (op) {
case OP_BUY : return ( "Buy" );
case OP_SELL : return ( "Sell" );
case OP_BUYLIMIT : return ( "Buy Limit" );
case OP_SELLLIMIT: return ( "Sell Limit" );
case OP_BUYSTOP : return ( "Buy Stop" );
case OP_SELLSTOP : return ( "Sell Stop" );
default : return ( "Unknown Operation" );
}
//}//+----------------------------------------------------------------------------+//| Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//void Message(string m) {// Comment(m);// if (StringLen(m)>0) Print(m);//}return ( 0 );
} //0//+------------------------------------------------------------------+//+------------------------------------------------------------------+
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoy magik number. privoju kod chtobi posmotreli v chem prichna i eshe dorobotali vzyali nailuchie svyazki indikatorov
사적인. chtobi posmotret v chom prichina - nuzhno kod pravilno razmestit - knopka "SCR" - togda kod budet bolee strukturirovan is nim budet legche rabotat
abolk : 사적인. chtobi posmotret v chom prichina - nuzhno kod pravilno razmestit - knopka "SCR" - togda kod budet bolee strukturirovan is nim budet legche rabotat
도와주세요. SL과 TP와 지표(Stochastic) 및 필터(MA)의 매개변수를 변경할 수 있는 조언자가 필요합니다. 빠른 선을 넘는 BUY 신호는 SELL 하락의 경우 느려집니다. 거래는 MA 방향으로 수행됩니다! 어드바이저가 복잡하지도 않고 별로 흥미롭지도 않은건 알겠는데 데이터베이스에 있는 어드바이저들을 다 훑어본 결과 비슷한거 못찾았어요! 나는 나 자신을 쓰려고 노력했다 - 3 일 동안 빈 (((
좋은 오후입니다. 고문의 코더에게 거래 방법을 제거하라는 요청(이미 5개가 있습니다.) 또한 그가 설정한 테이크 이익을 제거하면 그는 단순히 이익을 줄입니다!(미리 감사합니다!
너 뭐야!)
안녕하세요. 누가 그림과 같은 알고리즘을 프로그래밍 방식으로 실행할 수 있습니까? 손으로 시도하고 작동하는 것 같습니다. 하지만 모니터 앞에 앉는 것은 끔찍하다. 조금 자동화하고 싶습니다. 포지션 오프닝입니다. 다른 프로그램은 이익을 위해 닫을 것입니다.
나는 당신의 도움을 요청합니다. 그것은 스스로 해결되지 않았거나 한 방향으로 전체 무리를 열거나 완전히 건너 뜁니다. MQL을 오랫동안 공부해야 하는데 그게 무엇인지 이해해야 합니다. 그러므로 나는 당신에게 도움을 청합니다.
여기가 분명해 보입니다. 1.4125의 가격에서 보류 중인 매도 정지 가 트리거되었고, 1.4135의 가격에 매수 정지를 설정하고, 다른 프로그램이 모든 것을 마감할 때까지 로트에 LotUp을 곱하는 식으로 계속됩니다.
안부, 세르게이.
무료로 어드바이저를 작성해 드리지만, 필요하신 분에게 1인 1글 작성합니다. http://forum.fortrader.ru/index.php?board=3.0
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoy magik number. privoju kod chtobi posmotreli v chem prichna i eshe dorobotali vzyali nailuchie svyazki indikatorov
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoy magik number. privoju kod chtobi posmotreli v chem prichna i eshe dorobotali vzyali nailuchie svyazki indikatorov
사적인. chtobi posmotret v chom prichina - nuzhno kod pravilno razmestit - knopka "SCR" - togda kod budet bolee strukturirovan is nim budet legche rabotat