int Period1= 6 ; //Период 1МА ENUM_APPLIED_PRICE PRICE1= PRICE_MEDIAN ; // 1МА По цене
int Period2= 50 ; //Период 2МА ENUM_APPLIED_PRICE PRICE2= PRICE_MEDIAN ; // 2МА По цене
int Period3= 800 ; //Период 3МА ENUM_APPLIED_PRICE PRICE3= PRICE_MEDIAN ; // 3МА По цене
int Period4= 25 ; //Период 4МА ENUM_APPLIED_PRICE PRICE4= PRICE_MEDIAN ; // 4МА По цене, вспомогательная
uint X= 20 ; // отклонение от ма, пунктов int i; // исходный счетчик ордеров bool dummy; // для выхода функций в переменную int ticket; // тикет открываемого ордера int Magic= 444 ; // Magic Number int lastlot,tp; double price; int count; int otype;
intOnInit () { return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ voidOnDeinit ( constint reason) { } voidOnTick () { { if ( Bars < 801 ) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли return ; } //+----------------------------------------------------------------Сборник параметров индикаторов
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2012, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
extern double Lots= 0.01 ; //Oбьем открываемого ордера
extern double Martin= 2 ;
extern int Step= 200 ;
extern int TakeProfit= 250 ;
extern const string Настройки_работы_советника= "" ;
int Period1= 6 ; //Период 1МА
ENUM_APPLIED_PRICE PRICE1= PRICE_MEDIAN ; // 1МА По цене
int Period2= 50 ; //Период 2МА
ENUM_APPLIED_PRICE PRICE2= PRICE_MEDIAN ; // 2МА По цене
int Period3= 800 ; //Период 3МА
ENUM_APPLIED_PRICE PRICE3= PRICE_MEDIAN ; // 3МА По цене
int Period4= 25 ; //Период 4МА
ENUM_APPLIED_PRICE PRICE4= PRICE_MEDIAN ; // 4МА По цене, вспомогательная
uint X= 20 ; // отклонение от ма, пунктов
int i; // исходный счетчик ордеров
bool dummy; // для выхода функций в переменную
int ticket; // тикет открываемого ордера
int Magic= 444 ; // Magic Number
int lastlot,tp;
double price;
int count;
int otype;
int OnInit ()
{
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
}
void OnTick ()
{
{
if ( Bars < 801 ) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
return ;
}
//+----------------------------------------------------------------Сборник параметров индикаторов
double ma1= NormalizeDouble ( iMA ( NULL , 0 ,Period1, 0 , MODE_SMA ,PRICE1, 1 ), 5 ); //+----6
double ma2= NormalizeDouble ( iMA ( NULL , 0 ,Period2, 0 , MODE_SMA ,PRICE2, 1 ), 5 ); //+----50
double ma3= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE3, 1 ), 5 ); //+----800
double ma31= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE3, 10 ), 5 ); //+----800
double ma32= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE3, 20 ), 5 ); //+----800
double ma33= NormalizeDouble ( iMA ( NULL , 0 ,Period3, 0 , MODE_SMA ,PRICE3, 30 ), 5 ); //+----800
double ma4= NormalizeDouble ( iMA ( NULL , 0 ,Period4, 0 , MODE_SMA ,PRICE4, 0 ), 5 ); //+----25
//+----------------------------------------------------------------- Открытие ордеров по 25-50 ма
//+-------------------------------------------------- открыть ордер
if (Counts()== 0 ) //+-------------если количество ордеров равно 0
{
if (( MathAbs (ma2-ma4)> 30 * _Point )
&& ( MathAbs ( Bid -ma3)> 100 * Point ())
&& (ma31>ma32>ma33)) //+-----покупка по 6+50
{
ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 0 , 0 , 0 , "" ,Magic, 0 , clrAzure ); //+-------------отправка 1 ордера
}
if (( MathAbs (ma2-ma3)> 30 * _Point )) //+-------------условие продажи
{
ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 0 , 0 , 0 , "" ,Magic, 0 , clrAzure ); //+-------------отправка 1 ордера
}
if (ticket== 0 )
{
return ;
}
}
else //+------------если уже есть
{
if (FindLastOType()== OP_BUY )
{
if ( Ask <=FindLastOrderOpenPrice()-Step* Point ())
{
ticket= OrderSend ( Symbol (), OP_BUY ,(FindLastLot()*Martin), Ask , 0 , 0 , 0 , "" ,Magic, 0 , clrAzure );
ModifyOrders();
myOrdersCloseTotal();
}
}
if (FindLastOType()== OP_SELL )
{
if ( Bid >=FindLastOrderOpenPrice()+Step* Point ())
{
ticket= OrderSend ( Symbol (), OP_SELL ,(FindLastLot()*Martin), Bid , 0 , 0 , 0 , "" ,Magic, 0 , clrAzure );
ModifyOrders();
myOrdersCloseTotal();
}
}
}
}
//+-------------------------------------------------------------количество ордеров в рынке
int Counts()
{
count= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==Magic))
{
if (( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && ( OrderTicket ()==ticket))
count++;
}
}
return (count);
}
//+---------------------------------------------------------------найти тип последнего ордера
int FindLastOType()
{
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic))
{
if (( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) && ( OrderTicket ()==ticket))
return ( OrderType ());
}
}
return (- 1 );
}
//+--------------------------------------------------------------вернуть цену последнего открытого ордера
double FindLastOrderOpenPrice()
{
int oldticket;
ticket= 0 ;
double oldorderopenprice= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic) && ( OrderType ()< 2 ))
{
oldticket= OrderTicket ();
if (oldticket>ticket)
{
ticket=oldticket;
oldorderopenprice= OrderOpenPrice ();
}
}
}
return (oldorderopenprice);
}
//+--------------------------------------------------------------вернуть объем последнего ордера
double FindLastLot()
{
int oldticket;
ticket= 0 ;
double oldlots= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // цикл будет работать пока не останется ордеров
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic)
&& ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ))
{
oldticket= OrderTicket ();
if (oldticket>ticket)
{
ticket=oldticket;
oldlots= OrderLots ();
}
}
}
return (oldlots);
}
//+---------------------------------------------------------закрыть все если хоть один из серии закрылся
int myOrdersCloseTotal()
{
int myOrderS= 0 ;
for (i= OrdersTotal ()- 1 ; i> 0 ; i--)
{
if ((( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))== true ) && OrderSymbol ()== Symbol () && ( OrderType ()< 2 ))
{
myOrderS= OrdersTotal ();
}
else
dummy=( OrderClose ( OrderTicket (), OrderLots (), Bid , 0 ,White));
}
return (myOrderS);
}
//+------------------------------------------------модификация существующих расчет тейка по средней цене
void ModifyOrders()
{
bool z= true ;
double avg_price= 0 ;
price= 0 ;
double orderlots= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) && (FindLastOType()== OP_BUY ))
{
price=( OrderOpenPrice ()* OrderLots ());
orderlots=FindLastLot();
avg_price= NormalizeDouble (price/orderlots, Digits );
tp=(avg_price+TakeProfit* Point ()); //+------------------------------------тут деление на 0 второго ордера
z= OrderModify ( OrderTicket (), OrderOpenPrice (), 0 ,tp, 0 );
if (!z)
Print ( "Ошибка функции модифицирования" );
}
}
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) && ( OrderSymbol ()== Symbol ())
&& ( OrderMagicNumber ()==Magic) &&(FindLastOType()== OP_SELL ))
{
price=( OrderOpenPrice ()* OrderLots ());
orderlots=FindLastLot();
avg_price= NormalizeDouble (price/orderlots, Digits );
tp=(avg_price-TakeProfit* Point ()); //+------------------------------------тут деление на 0 второго ордера
z= OrderModify ( OrderTicket (), OrderOpenPrice (), 0 ,tp, 0 );
if (!z)
Print ( "Ошибка функции модифицирования" );
}
}
}
/*
*/
//+------------------------------------------------------------------+
와, 잘했어
그리고 이제 컴파일러가 맹세하는 그 라인.
이 사회에 끼어들고 싶지 않은데 계산에서 0이 어디에서 오는지 아무도 알려주지 않았습니까?
포스트 413
유형 변환으로 인한 데이터 손실 가능성 count.mq4 231 12
유형 변환으로 인한 데이터 손실 가능성 count.mq4 246 12
TP와 로트를 정수 변수에 쓰면 안된다는 것을 이해하지 못하셨나요? 왜 그런 겁니까?
이런 식으로 올바르게 쓰는 방법을 볼 수 있습니까?
다시 한 번 묻겠습니다. 지난 1시간 동안 TF H1의 표시기에서 무슨 일이 일어났는지 알고 싶습니까? 아니면 주어진 시간에 TF H1의 표시기에서 무슨 일이 일어나고 있는지 알고 싶습니까?
첫 번째 닫힌 막대 H1에 표시기 값이 필요합니다.
이런 식으로 올바르게 쓰는 방법을 볼 수 있습니까?
double lastlot,tp;
이런 식으로 올바르게 쓰는 방법을 볼 수 있습니까?
.
덕분에 오류가 사라졌습니다. 그러나 봇은 터미널과 함께 실행될 때 여전히 죽습니다. 명백한 이유 없이
TestGenerator: 일치하지 않는 데이터 오류(2016.12.02 12:45에서 볼륨 제한 262 초과)
TestGenerator: 일치하지 않는 데이터 오류(2016.10.13 10:05의 높은 값 1.10131은 최소 시간 프레임에서 도달하지 않음, 높은 가격 1.10123 불일치)
덕분에 오류가 사라졌습니다. 그러나 봇은 터미널과 함께 실행될 때 여전히 죽습니다. 명백한 이유 없이
TestGenerator: 일치하지 않는 데이터 오류(2016.12.02 12:45에서 볼륨 제한 262 초과)
TestGenerator: 일치하지 않는 데이터 오류(2016.10.13 10:05의 높은 값 1.10131은 최소 시간 프레임에서 도달하지 않음, 높은 가격 1.10123 불일치)
이것은 봇이 "죽는" 것이 아니라 이야기입니다. 최소한 사전으로 영어를 배우십시오.
그리고 한 번에 전체 증기에 똥 같은 이야기? 우연의 일치?
그리고 한 번에 전체 증기에 똥 같은 이야기? 우연의 일치?