4p0ssum : İsteğime gösterdiğiniz ilgi için teşekkür ederim sevgili gs. Kusura bakmayın ama ben bir programcı değilim, bu nedenle MQL4 gurusuna dönmeye karar verdim. Çalışırken gönderdiğim kod, farklı danışmanlardan topladım, daha doğrusu birinden sadece İzleyen Durdurma işlevini aldım. Gerisini kendim buldum (bekleyen siparişler vermekle ilgili). Sizden ve diğer gurulardan, gönderdiğim koda bir göz atmanızı rica ediyorum ve eğer sakıncası yoksa bu robota iki fonksiyon daha eklemek.
1) İkisinden biri tetiklendiğinde bekleyen bir siparişin silinmesi.
2) Otomatik lot artışı (her 50 $ 0,01 için, yani 100 $, 0,02 olacaktır)
Şimdiden teşekkür ederim.
//+------------------------------------------------------------------+//| 4p0ssum.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link" http://www.mql5.com "#property version"1.00"#property strictexternint TakeProfit = 100.0 ;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50 ; // Фиксированный размер тралаexternint TrailingStep = 0 ; // Шаг тралаexternbool Del = false ; // Удалять оппозитный ордерexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav" ; // Наименование звукового файла//------- Внешние параметры модуля -----------------------------------externstring _Parameters_b_Lots = "---------- Параметры модуля расчёта лота" ;
externint LotsWayChoice = 0 ; // Способ выбора рабочего лота:// 0-фиксированный,// 1-процент от депозита,// 2-фиксированно-пропорциональный,// 3-фракционно-фиксированный,externdouble Lots = 0.1 ; // Фиксированный размер лотаexternint LotsPercent = 10 ; // Процент от депозитаexternint LotsDeltaDepo = 500 ; // Коэффициент приращения депозитаexternint LotsDepoForOne = 500 ; // Размер депозита для одного минилотаexternint LotsMax = 1000 ; // Максимальное количество минилотов//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void start()
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400 * _Point ;
double SellStart = Bid - 400 * _Point ;
TakeProfitLevelB = BuyStart + TakeProfit* Point ;
TakeProfitLevelS = SellStart - TakeProfit* Point ;
if (Open[ 1 ]==Close[ 1 ]&& OrdersTotal ()== 0 )
{
int BuyTicket = OrderSend ( Symbol (),OP_BUYSTOP,GetSizeLot(),BuyStart, 3 , 0 ,TakeProfitLevelB, NULL , 0 , 0 ,Green);
int SellTicket = OrderSend ( Symbol (),OP_SELLSTOP,GetSizeLot(),SellStart, 3 , 0 ,TakeProfitLevelS, NULL , 0 , 0 ,Blue);
}
for ( int i= 0 ; i< OrdersTotal (); i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()== Symbol ()) {
TrailingPositions();
}
}
}
if (Del && ExistPositions( Symbol ()))DeleteOrders( Symbol (),- 1 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void TrailingPositions()
{
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep- 1 )*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return ;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep- 1 )*pp || OrderStopLoss()== 0 ) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return ;
}
}
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void ModifyStopLoss( double ldStopLoss)
{
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(), 0 ,CLR_NONE);
if (fm && UseSound) PlaySound (NameFileSound);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 06.03.2008 |//| Описание : Возвращает флаг существования позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| ot - время открытия ( 0 - любое время открытия) |//+----------------------------------------------------------------------------+bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
int i, k= OrdersTotal ();
if (sy== "" || sy== "0" ) 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) {
if (ot<=OrderOpenTime()) return (True);
}
}
}
}
}
}
return (False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
int i, k= OrdersTotal (), ot;
if (sy== "" || sy== "0" ) sy= Symbol ();
for (i= 0 ; i<k; i++) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op< 0 || ot==op)) {
if (mn< 0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), clrRed );
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.02.2008 |//| Описание : Возвращает одно из двух значений взависимости от условия. |//+----------------------------------------------------------------------------+string IIFs( bool condition, string ifTrue, string ifFalse) {
if (condition) return (ifTrue); elsereturn (ifFalse);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//| Параметры: |//| m - текст сообщения |//+----------------------------------------------------------------------------+void Message( string m) {
Comment (m);
if ( StringLen (m)> 0 ) Print (m);
}
//+------------------------------------------------------------------+//| Главная функция получения размера лота (вызывается из советника) |//+------------------------------------------------------------------+double GetSizeLot()
{
double dLot;
if (LotsWayChoice== 0 ) dLot=Lots;
// фиксированный процент от депозитаif (LotsWayChoice== 1 )
{
dLot= MathCeil (AccountFreeMargin()/ 100000 *LotsPercent)/ 10 ;
}
// фиксированно-пропорциональныйif (LotsWayChoice== 2 )
{
int k=LotsDepoForOne;
for ( double i= 2 ; i<=LotsMax; i++)
{
k=k+i*LotsDeltaDepo;
if (k>AccountFreeMargin())
{
dLot=(i- 1 )/ 10000 ; break ;
}
}
}
// фракционно-фиксированныйif (LotsWayChoice== 3 )
{
dLot= MathCeil ((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/ 10 ;
}
if (dLot<MarketInfo( Symbol (), MODE_MINLOT)) dLot=MarketInfo( Symbol (), MODE_MINLOT);
if (dLot< 0.01 ) dLot= 0.01 ;
return (dLot);
}
//+------------------------------------------------------------------+
Merhaba. Bir Uzman Danışman yazma konusunda yardımcı olup olamayacağınızı bilmek istedim. Mesele şu. Mum büyük bir hacimle (Al veya Sat) kapandıktan sonra, ikincisi için özel lot ve TP ile bir Al veya Sat emri açılır. Teşekkür ederim. Yardımcı olabilirseniz)) MT4 terminali
ilfatiskhakov : Merhaba. Bir danışman yazma konusunda yardımcı olup olamayacağınızı bilmek istedim. Mesele şu. Mum büyük bir hacimle (Al veya Sat) kapandıktan sonra, ikincisi için özel lot ve TP ile bir Al veya Sat emri açılır. Teşekkür ederim. Yardımcı olabilirseniz)) MT4 terminali
Merhaba! Ekteki ADC göstergesine bir danışman yazmanızı rica ederim. Sadece bu göstergeye göre, diğerine göre değil, çünkü bunların birçok çeşidi var.
Oktan oka çalışma prensibi - bir ok göründüğünde, bir anlaşma açılır ve bir ters sinyal göründüğünde, anlaşma kapatılır ve ters yönde açılır. Lot formüle göre hesaplanır (Bakiye x (risk / 1000), burada risk 0 ile 1 arasındadır. Ayrıca sabit bir lot fonksiyonu olmalıdır.
Merhaba! Ekteki ADC göstergesine bir danışman yazmanızı rica ederim. Sadece bu göstergeye göre, diğerine göre değil, çünkü bunların birçok çeşidi var.
Oktan oka çalışma prensibi - bir ok göründüğünde, bir anlaşma açılır ve bir ters sinyal göründüğünde, anlaşma kapatılır ve ters yönde açılır. Lot formüle göre hesaplanır (Bakiye x (risk/1000), burada risk 0 ile 1 arasındadır. Ayrıca sabit bir lot fonksiyonu olmalıdır.
İsteğime gösterdiğiniz ilgi için teşekkür ederim sevgili gs. Kusura bakmayın ama ben bir programcı değilim, bu nedenle MQL4 gurusuna dönmeye karar verdim. Çalışırken gönderdiğim kod, farklı danışmanlardan topladım, daha doğrusu birinden sadece İzleyen Durdurma işlevini aldım. Gerisini kendim buldum (bekleyen siparişler vermekle ilgili). Sizden ve diğer gurulardan, gönderdiğim koda bir göz atmanızı rica ediyorum ve eğer sakıncası yoksa bu robota iki fonksiyon daha eklemek.
Merhaba. Bir danışman yazma konusunda yardımcı olup olamayacağınızı bilmek istedim. Mesele şu. Mum büyük bir hacimle (Al veya Sat) kapandıktan sonra, ikincisi için özel lot ve TP ile bir Al veya Sat emri açılır. Teşekkür ederim. Yardımcı olabilirseniz)) MT4 terminali
https://www.mql5.com/ru/code/mt4/experts
Merhaba! Ekteki ADC göstergesine bir danışman yazmanızı rica ederim. Sadece bu göstergeye göre, diğerine göre değil, çünkü bunların birçok çeşidi var.
Oktan oka çalışma prensibi - bir ok göründüğünde, bir anlaşma açılır ve bir ters sinyal göründüğünde, anlaşma kapatılır ve ters yönde açılır. Lot formüle göre hesaplanır (Bakiye x (risk / 1000), burada risk 0 ile 1 arasındadır. Ayrıca sabit bir lot fonksiyonu olmalıdır.
Merhaba! Ekteki ADC göstergesine bir danışman yazmanızı rica ederim. Sadece bu göstergeye göre, diğerine göre değil, çünkü bunların birçok çeşidi var.
Oktan oka çalışma prensibi - bir ok göründüğünde, bir anlaşma açılır ve bir ters sinyal göründüğünde, anlaşma kapatılır ve ters yönde açılır. Lot formüle göre hesaplanır (Bakiye x (risk/1000), burada risk 0 ile 1 arasındadır. Ayrıca sabit bir lot fonksiyonu olmalıdır.
sürekli yanlış sinyaller
+ geleceğin göstergesi
sürekli yanlış sinyaller
+ geleceğin göstergesi
H4'te manuel olarak işlem yapıyorum, fena değil
Iuri Tokman :
sürekli yanlış sinyaller
+ geleceğin göstergesi
MT5'in biraz farklı giriş noktaları var
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ \\\\\\\\\\\\\\\\\\\\
göstergeyi kontrol etmek için başlatıldı - başlangıç fena değil gibi görünüyor
H4'te manuel olarak işlem yapıyorum, fena değil
stüdyoda ticaretin sonucu
MT5'in biraz farklı giriş noktaları var
gelecek nerede?
i - 1gelecek nerede?
Hiçbir fikrim yok - olduğu gibi kör! Bilimsel dürtme yöntemiyle kendi kendime öğrendim
\\\\\\\\\\\\\ Kendime şaşırdım - ayrıca sonucun fena olmadığını gösteriyor - uzmanım zor - test etmek uzun zaman alıyor