SL ile danışman aynı türden bir sipariş açmalıdır ve TP ile tam tersi! Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!
//+------------------------------------------------------------------+//| Kogalym.mq4 |//| TO |//| http://forex-tradexperts-to.narod.ru |//+------------------------------------------------------------------+#property copyright "TO"#property link "http://forex-tradexperts-to.narod.ru"//--------------------------------------------------------------------externint stoploss = 50 ,
takeprofit = 50 ;
externdouble Lot= 1 ;
externdouble Martin_Koef = 1.6 ;
//--------------------------------------------------------------------int init()
{
OrderSend ( Symbol (),OP_SELL,Lot,Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );
}
//--------------------------------------------------------------------int start()
{ for ( int i= 0 ; i< OrdersTotal (); i++){
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true){
if (OrderSymbol()== Symbol ()){
Lot = OrderLots(); return ;}}}
if (Lot== 0 ) return ;
if (OrderType() == OP_SELL)
if (OrderProfit()> 0 ) OrderSend ( Symbol (),OP_BUY , getLot(),Ask, 3 , NormalizeDouble (Bid - stoploss* Point , Digits ),
NormalizeDouble (Ask + takeprofit* Point , Digits ), " " , 777 , Blue );
elseOrderSend ( Symbol (),OP_SELL,getLot(),Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );
if (OrderType() == OP_BUY)
if (OrderProfit()> 0 ) OrderSend ( Symbol (),OP_SELL,getLot(),Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );
elseOrderSend ( Symbol (),OP_BUY ,getLot(),Ask, 3 , NormalizeDouble (Bid - stoploss* Point , Digits ),
NormalizeDouble (Ask + takeprofit* Point , Digits ), " " , 777 , Blue );
return ( 0 );
}
//-----------------------------------------------------------------double getLot()
{
if (OrdersHistoryTotal()== 0 ) return ( 1 );
// ищем самый последний закрытый ордерdatetime time= 0 ;
int i;
int ticket=- 1 ;
for (i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderSymbol()== Symbol ())
{
if (OrderCloseTime()>time)
{
time=OrderCloseTime();
ticket=OrderTicket();
}
}
}
}
if (OrderTicket()!=ticket) OrderSelect (ticket,SELECT_BY_TICKET);
if (OrderProfit()<= 0 ) return ( NormalizeDouble (OrderLots()*Martin_Koef, 2 ));
if (OrderProfit()> 0 ) return ( 1 );
//-----
}
Kogalym писал(а)>> SL ile danışman aynı türden bir sipariş açmalıdır ve TP ile tam tersi! Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!
Söyle hata nerede???
if (OrderType() == OP_SELL)
if (OrderProfit()> 0 )
Bu göstergenin bir danışman için uygun olduğunu kim bilebilir, yazar tarafından kullanıldığı bir strateji buldum veya bir danışmana kaydedebilir ve nasıl yapılacağını, örneğin örnek olarak gösterebilirsiniz. Histogram yeşilse ve çizgi histogramın altındaysa sinyal al? Hücreler için durum aynıdır.
ve MAX ve MIN dizilerinde tam olarak ne almak istediğiniz belli değil
tekrar anlatayım :)
MACD sütunlarının tüm değerlerini içeren bir dizi vardır.
Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.
İşte kod tekrar:
for (i= 0 ; i< 50 ; i=i+ 10 ) //общий цикл для всех значений МАКД, шаг 10
{
int k = i;
for (k=i; k<i+ 10 ; k++) // цикл внутри десятки значений, шаг 1
{
x10[k] = MACD[k]; // массив десяток
}
int IndexMAX = ArrayMaximum (x10); // найден индекс максимального значения внутри десятки int IndexMIN = ArrayMinimum (x10); // --//--
MAX[k] = MACD[IndexMAX]; // Рисуем найденное максимальное значение внутри десятки на k баре
MIN[k] = MACD[IndexMIN];
}
Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.
Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...
MACD sütunlarının tüm değerlerini içeren bir dizi vardır.
Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.
İşte kod tekrar:
Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.
Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...
for (i= 0 ; i<limit; i+= 10 ) //общий цикл для всех значений МАКД, шаг 10
{
int k;
for (k=0; k< 10 ; k++) // цикл внутри десятки значений, шаг 1
{
x10[k] = MACD[i+k]; // массив десяток
}
int IndexMAX = ArrayMaximum (x10); // найден индекс максимального значения внутри десятки int IndexMIN = ArrayMinimum (x10); // --//--
MAX[k] = x10[IndexMAX]; // Рисуем найденное максимальное значение внутри десятки на k баре
MIN[k] = x10[IndexMIN];
}
Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!
Söyle hata nerede???
SL ile danışman aynı türden bir sipariş açmalıdır ve TP ile tam tersi!
Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!
Söyle hata nerede???
ve MAX ve MIN dizilerinde tam olarak ne almak istediğiniz belli değilx10 dizisinin boyutu nedir?
on?
O zaman şu şekilde yeniden yazmanız gerekir:
tekrar anlatayım :)
MACD sütunlarının tüm değerlerini içeren bir dizi vardır.
Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.
İşte kod tekrar:
Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.
Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...
tekrar anlatayım :)
MACD sütunlarının tüm değerlerini içeren bir dizi vardır.
Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.
İşte kod tekrar:
Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.
Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...
Göstergenin tüm kodunu göster
Göstergenin tüm kodunu göstertekrar anlatayım :)
Sanırım şöyle yazmak istedin:
Ve hedefin nedir?
Peki, ne almak istiyorsun. Düzinelerce bölmek anlamsızdır. Sürekli zaman içinde hareket ederler.
Sanırım şöyle yazmak istedin:
çizemiyorum :((
ps k=0 ekledim :)
Ve hedefin nedir?
Peki, ne almak istiyorsun. Düzinelerce bölmek anlamsızdır. Sürekli zaman içinde hareket ederler.
Evet, amaç gerçek... Her 10 çubuk arasında maksimumu göstermek istiyorum...