Молодец, цвета подобраны толково.Вот что получилось. Супер!
Молодец, цвета подобраны толково.Вот что получилось. Супер!
Подскажите пж, код расчета лота.
Кто каким пользуется?
extern double Lot = 0.1;
extern bool use_percent_of_deposit = false;
extern double Risk = 1;
int nor_lot=2;
//////////////////////////////////////////////////////////////
void init()
{
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) nor_lot=1;
}
//////////////////////////////////////////////////////////////
void start()
{
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) nor_lot=1;
//расчёт лота от % депозита
if(use_percent_of_deposit) Lot=GetLot();
}
///////////////////////////////
double GetLot()
{
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);
return(NormalizeDouble(Lot,nor_lot));
}
PHP:double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; }
В старших классах вам расскажут, что аргументы нелинейной функции не сокращаются с ее множителями.В этой строке в скобках делим на Step а потом умножаем на него.
Конечно идет округление, но они же сократятся (согласно тому что мы проходим в школе на математике).
OrderProfit()-OrderCommission()-OrderSwap()-MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_TICKVALUE)*OrderLots();
Прибыль ордера в валюте)))
Спасибо. А теперь волнующий вопрос:
Нужно вычислить профит ордера за минусом комиссии, спреда, свопа.
Чую что как-то так, но не уверен.PHP:OrderProfit()-OrderCommission()-OrderSwap()-MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_TICKVALUE)*OrderLots();
Спред уже учтен в OrderProfit().Да, верно. Комиссия ведь отрицательна.
А как учесть спред?
Да, верно. Комиссия ведь отрицательна.
А как учесть спред?
то есть данная строка эквивалентна записи:Выражение для if должно возвращать TRUE или FALSE, как, например, результат сравнения. IsOptimisаtion() возвращает TRUE, если идет оптимизация и FALSE, если не идет, т.е. вся строка выполняет возврат из подпрограммы в случае работы в режиме оптимизации.
то есть данная строка эквивалентна записи:
if(IsOptimization()==TRUE)
{
return(0);
}
но почему так и не записать???
Здравствуйте. Прошу помочь в одном вопросе. Как добавить функция в советник, чтобы после получения стоп-лосса, сов не спешил открывать сделки, а ждал какое-нибудь заданное время. А то часто бывает стоп получен и тут же сов ставит снова ордер и снова стоп получает, и так раза по 3-4 подряд, когда сильная коррекция идет.
//+------------------------------------------------------------------+
//| ChartScroll.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//#include <WinUser32.mqh>
//dobavleno
//#import "user32.dll"
//int RegisterWindowMessageA (string param);
//#import
//konec dobavki
int MT4InternalMsg=0;
datetime first_pos;
int periods[5]={ PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1 };
int handles[5];
int init()
{
//----
//MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
Print("Registered message ",MT4InternalMsg);
first_pos=Time[FirstVisibleBar()];
//----
for(int i=0; i<5; i++)
{
if(periods[i]!=Period())
{
handles[i]=WindowHandle(Symbol(),periods[i]);
if(handles[i]==NULL) Print(Symbol(),",",periods[i]," not found");
}
else handles[i]=NULL;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
datetime pos;
//----
while(!IsStopped())
{
pos=Time[FirstVisibleBar()];
if(first_pos!=pos)
{
first_pos=pos;
for(int i=0; i<5; i++)
{
//if(handles[i]!=NULL) PostMessageA(handles[i],MT4InternalMsg,55,first_pos+periods[i]*60);
}
}
Sleep(100);
}
//----
return(0);
}
//+------------------------------------------------------------------+
Как такое может быть?
FirstVisibleBar() нету функции, а компилятор не ругается.