Hepinize iyi günler Böyle bir soru vardı, durumu netleştirmede biraz yardımcı olmanızı rica ediyorum.
Izgara robotu, başlatıldığında, ORDER_TYPE_BUY_LIMIT (ayrıca en üste ORDER_TYPE_BUY_STOP) bir sınır emirleri ızgarası yerleştirir. Izgara adımı 1, 0,5, hacim 1 lot alır. Sorun şu ki, bir kez uzun pozisyon almaya başladım (10 aldım, alım 10,5 oldu), almıyorum; İkinci kez özlüyorum (9'da aldım, 9.5'te aldım), hacim zaten 2 lot. Sonra fiyat girmeye başlar ve tüm hacim 9.5'te alınır!!!
Siparişler yapı tarafından verilir
MqlTradeRequest request_={ 0 };
request_.action= TRADE_ACTION_PENDING ; // установка отложенного ордера
request_.magic=order_magic; // ORDER_MAGIC
request_.symbol=pair; // инструмент
request_.volume=v_b; // объем в 0.1 лот
request_.tp=pr_ent_tp; // Take Profit //--- сформируем тип ордера
request_.type= ORDER_TYPE_BUY_LIMIT ; // тип ордера //---сформируем цену для отложенного ордера
request_.price=pr_ent; // цена для открытия //--- отправим торговый приказ MqlTradeResult result_={ 0 };
m_Trade. OrderSend (request_,result_);
Ve herkesin kendi teikasıyla teika yapmasına ihtiyacım var. 10'da giriş, 10.5 fiyatını bekliyor Giriş 9, fiyat 9.5. Ve ilk alımdaki tüm hacim değil.
Hepinize iyi günler Böyle bir soru vardı, durumu netleştirmede biraz yardımcı olmanızı rica ediyorum.
Izgara robotu, başlatıldığında, ORDER_TYPE_BUY_LIMIT (ayrıca en üste ORDER_TYPE_BUY_STOP) bir sınır emirleri ızgarası yerleştirir. Izgara adımı 1, 0,5, hacim 1 lot alır. Sorun şu ki, bir kez uzun pozisyon almaya başladım (10 aldım, alım 10,5 oldu), almıyorum; İkinci kez özlüyorum (9'da aldım, 9,5'te aldım), hacim zaten 2 lot. Sonra fiyat girmeye başlar ve tüm hacim 9.5'te alınır!!!
Siparişler yapı tarafından verilir
Ve herkesin kendi teikasıyla teika yapmasına ihtiyacım var. 10'da giriş, 10.5 fiyatını bekliyor Giriş 9, fiyat 9.5. Ve ilk alımdaki tüm cilt değil.
Yapıyla ilgili bir şey yapmam gerekiyor mu?
"Netleştirme" değil, "Hedge" hesap türünü kullanın
Netleştirmede, bir pozisyonun her zaman sadece bir TP'si vardır. Bu nedenle, özellikle, şebekedeki her siparişin kendi TP'sine sahip olduğu şebeke TS, istendiği gibi çalışmayacaktır.
Aşağıda nasıl çalıştığına dair bir örnek var
// Пример Netting с поддержкой множества однонаправленных позиций (у каждой могут быть свои Magic, SL/TP, Comment, OpenTime и т.д.).// Запустите этот пример на Netting-счете в Тестере с влюченной Визуализацией.#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006#define VIRTUAL_LIMITS_TP_SLIPPAGE // Лимитники и TP исполняются по первой цене акцепта - положительные проскальзывания#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577#include <fxsaber\Virtual\Sync.mqh> // Синхронизатор#define AskSymbolInfoDouble ( _Symbol , SYMBOL_ASK )
inputint iAmount = 5 ; // Количество ордеров в сеткеinputint iOffset = 120 ; // На каком расстоянии (в пипсах) ставить ордера сеткиinputint iTP = 120 ; // TakeProfit каждого ордера сетки// Выставляем один раз сетку из Amount ордеров на Offset-расстоянии друг от друга с заданным TP.void System( constint Amount, constint Offset, constint TP )
{
staticbool FirstRun = true ;
if (FirstRun)
{
for ( int i = 1 ; i <= Amount; i++)
{
constdouble PriceOpen = Ask - i * Offset * _Point ;
constdouble PriceTP = PriceOpen + TP * _Point ;
OrderSend ( _Symbol , OP_BUYLIMIT , 1 , PriceOpen, 0 , 0 , PriceTP, ( string )i); // Выставляем каждый ордер сетки
}
FirstRun = false ;
}
}
voidOnTick ()
{
staticconstbool Init = VIRTUAL::Select(VIRTUAL::Create()); // Система будет работать в этом виртуальном окруженииstaticconstbool IsVisual = MQLInfoInteger ( MQL_VISUAL_MODE );
staticbool FirstRun = true ;
VIRTUAL::NewTick(); // Добавили тик в виртуальное торговое окружение
System(iAmount, iOffset, iTP); // Запустили ТС на выбранном торговом окружении (виртуальное)
SYNC::Positions<ISTIME>(); // Синхронизировли реальное торговое окружение с виртуальнымif (IsVisual)
Comment (VIRTUAL::ToString( true )); // Вывели на чарт состояние виртуального торгового окружения (true - вместе с историей торгов)
}
Fikir basit. Aracı sanal olanda başlattık, ancak gerçek olanda sadece senkronize ediyoruz. Aracın kaynak kodunun değiştirilmesine gerek yoktur (örnekteki Sistem işlevi).
Tünaydın. Terminali kapatana kadar sayılan dizilerin uzanacağı bir mqh dosyası yapmak ve yalnızca büyük bir zaman boşluğu olduğunda (benim durumumda 3600) indirmek istedim. Ancak, göstergeyi derlersem, mqh dosyasının da tüm dizileri sıfırladığı ortaya çıkıyor. İndikatör ile her şeyi yapıp derleyebilmem için nasıl yapabilirim, ancak mqh dosyası terminal kapanana kadar sıfırlanmaz mı?
class CMyTicks
{
protected :
int countTicks;
public :
datetime m_TickTime[];
datetime m_FirstTickTime;
//+------------------------------------------------------------------+//| Constructor. |//+------------------------------------------------------------------+ void CMyTicks()
{
countTicks= 0 ;
}
//+------------------------------------------------------------------+ void CollectTicks( int m_getticks= 1000 )
{
MqlTick items[];
int received= CopyTicks ( _Symbol ,items, COPY_TICKS_ALL , 0 ,m_getticks);
...
m_FirstTickTime=items[ 0 ].time;
}
};
//+------------------------------------------------------------------+
#include <Test_Array_Include.mqh>
CMyTicks Test;
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate ( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---
ReloadAsk();
//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+int getticks= 100000 ;
datetime firstticktime= 0 ;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void ReloadAsk()
{
MqlTick items[];
int received= CopyTicks ( _Symbol ,items, COPY_TICKS_ALL , 0 ,getticks);
firstticktime=items[ 0 ].time;
if (( int )firstticktime>( int )Test.m_FirstTickTime+ 3600 )
{
Test.CollectTicks(getticks);
int ArrSize= ArraySize (Test.m_TickTime);
Print ( " Should not apear after compilation. ArrSize: " ,ArrSize); //
}
}
//+------------------------------------------------------------------+
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Merhaba, lütfen danışmanın örneğin 10 döviz çiftinde kurulu olup olmadığını söyleyin,
Açabileceği maksimum çift sayısını programlı olarak ayarlaması mümkün mü?
Yani, danışman 10 farklı çift tablosundaysa ve ayarlar maksimum çift sayısının 5 olduğunu gösteriyorsa.
Ve danışman sadece ilk 5 çift üzerinde çalışıyor ve kalan 5 çift yok sayılıyor mu?
Bu mümkün mü?
Kod .mq biçimindeyse, yapabilirsiniz. .ex ile karıştırılmamalıdır
Hepinize iyi günler
Böyle bir soru vardı, durumu netleştirmede biraz yardımcı olmanızı rica ediyorum.
Izgara robotu, başlatıldığında, ORDER_TYPE_BUY_LIMIT (ayrıca en üste ORDER_TYPE_BUY_STOP) bir sınır emirleri ızgarası yerleştirir. Izgara adımı 1, 0,5, hacim 1 lot alır. Sorun şu ki, bir kez uzun pozisyon almaya başladım (10 aldım, alım 10,5 oldu), almıyorum; İkinci kez özlüyorum (9'da aldım, 9.5'te aldım), hacim zaten 2 lot. Sonra fiyat girmeye başlar ve tüm hacim 9.5'te alınır!!!
Siparişler yapı tarafından verilir
Ve herkesin kendi teikasıyla teika yapmasına ihtiyacım var. 10'da giriş, 10.5 fiyatını bekliyor
Giriş 9, fiyat 9.5. Ve ilk alımdaki tüm hacim değil.
Yapıyla ilgili bir şey yapmam gerekiyor mu?
Hepinize iyi günler
Böyle bir soru vardı, durumu netleştirmede biraz yardımcı olmanızı rica ediyorum.
Izgara robotu, başlatıldığında, ORDER_TYPE_BUY_LIMIT (ayrıca en üste ORDER_TYPE_BUY_STOP) bir sınır emirleri ızgarası yerleştirir. Izgara adımı 1, 0,5, hacim 1 lot alır. Sorun şu ki, bir kez uzun pozisyon almaya başladım (10 aldım, alım 10,5 oldu), almıyorum; İkinci kez özlüyorum (9'da aldım, 9,5'te aldım), hacim zaten 2 lot. Sonra fiyat girmeye başlar ve tüm hacim 9.5'te alınır!!!
Siparişler yapı tarafından verilir
Ve herkesin kendi teikasıyla teika yapmasına ihtiyacım var. 10'da giriş, 10.5 fiyatını bekliyor
Giriş 9, fiyat 9.5. Ve ilk alımdaki tüm cilt değil.
Yapıyla ilgili bir şey yapmam gerekiyor mu?
"Netleştirme" değil, "Hedge" hesap türünü kullanın
Bunu değiştirmek için yeniden MT yapmanız ve Hedge kullan kutusunu işaretlemeniz gerekir. Veya mevcut olanı değiştirebilir miyim?
Tekrar kontrol et...
Yine aynı soruyla, Netting hesabı için böyle bir alma sistemi uygulayan var mı? Belki forumda bunu soran vardır?
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Kütüphaneler: Sanal
fxsaber , 2018.11.15 17:16
Netleştirmede, bir pozisyonun her zaman sadece bir TP'si vardır. Bu nedenle, özellikle, şebekedeki her siparişin kendi TP'sine sahip olduğu şebeke TS, istendiği gibi çalışmayacaktır.
Aşağıda nasıl çalıştığına dair bir örnek var
Fikir basit. Aracı sanal olanda başlattık, ancak gerçek olanda sadece senkronize ediyoruz. Aracın kaynak kodunun değiştirilmesine gerek yoktur (örnekteki Sistem işlevi).
Tünaydın. Terminali kapatana kadar sayılan dizilerin uzanacağı bir mqh dosyası yapmak ve yalnızca büyük bir zaman boşluğu olduğunda (benim durumumda 3600) indirmek istedim. Ancak, göstergeyi derlersem, mqh dosyasının da tüm dizileri sıfırladığı ortaya çıkıyor. İndikatör ile her şeyi yapıp derleyebilmem için nasıl yapabilirim, ancak mqh dosyası terminal kapanana kadar sıfırlanmaz mı?