Introduction
Since machine learning has recently gained popularity, many have heard about Deep Learning and desire to know how to apply it in the MQL language. I have seen simple implementations of artificial neurons with activation functions, but nothing that implements a real Deep Neural Network. In this article, I will introduce to you a Deep Neural Network implemented in the MQL language with its different activation functions, such as the hyperbolic tangent function for the hidden layers and the Softmax function for the output layer. We will move from the first step through the end to completely form the Deep Neural Network.
1. Making an Artificial Neuron
It begins with the basic unit of a neural network: a single neuron. In this article, I will concentrate on the different parts of the type of neuron that we are going to use in our Deep Neural Network, although the biggest difference between types of the neurons is usually the activation function.
1.1. Parts of a Single Neuron
The artificial neuron, loosely modeled off of a neuron in the human brain, simply hosts the mathematical computations. Like our neurons, it triggers when it encounters sufficient stimuli. The neuron combines input from the data with a set of coefficients, or weights, that either amplify or dampen that input, which thereby assigns significance to inputs for the task the algorithm is trying to learn. See each part of the neuron in action in the next image:
1.1.1. Inputs
The input is either an external trigger from the environment or comes from outputs of other artificial neurons; it is to be evaluated by the network. It serves as “food” for the neuron and passes through it, thereby becoming an output we can interpret due to the training we gave the neuron. They can be discrete values or real-valued numbers.
1.1.2. Weights
Weights are factors that are multiplied by the entries which correspond to them, increasing or decreasing their value, granting greater or lesser meaning to the input going inside the neuron and, therefore, to the output coming out. The goal of neural network training algorithms is to determine the “best” possible set of weight values for the problem to resolve.
1.1.3. Net Input Function
In this neuron part, the inputs and weights converge in a single-result product as the sum of the multiplication of each entry by its weight. This result or value is passed through the activation function, which then gives us the measures of influence that the input neuron has on the neural network output.
1.1.4. Activation Function
The activation function leads to the output. There can be several types of activation function (Sigmoid, Tan-h, Softmax, ReLU, among others). It decides whether or not a neuron should be activated. This article focuses on the Tan-h and Softmax types of function.
1.1.5. Output
Finally, we have the output. It can be passed to another neuron or sampled by the external environment. This value can be discrete or real, depending on the activation function used.
2. Building the Neural Network
The neural network is inspired by the information processing methods of biological nervous systems, such as the brain. It is composed of layers of artificial neurons, each layer connected to the next. Therefore, the previous layer acts as an input to the next layer, and so on to the output layer. The neural network’s purpose could be clustering through unsupervised learning, classification through supervised learning or regression. In this article, we will focus on the ability to classify into three states: BUY, SELL or HOLD. Below is a neural network with one hidden layer:
3. Scaling from a Neural Network into a Deep Neural Network
What distinguishes a Deep Neural Network from the more commonplace single-hidden-layer neural networks is the number of layers that compose its depth. More than three layers (including input and output) qualifies as “deep” learning. Deep, therefore, is a strictly defined, technical term that means more than one hidden layer. The further you advance into the neural net, the more complex features there are that can be recognized by your neurons, since they aggregate and recombine features from the previous layer. It makes deep-learning networks capable of handling very large, high-dimensional data sets with billions of parameters that pass through nonlinear functions. In the image below, see a Deep Neural Network with 3 hidden layers:
3.1. Deep Neural Network Class
Now let’s look at the class that we will use to create our neural network. The deep neural network is encapsulated in a program-defined class named DeepNeuralNetwork. The main method instantiates a 3-4-5-3 fully connected feed-forward neural network. Later, in a training session of the deep neural network in this article, I will show some examples of entries to feed our network, but for now we will focus on creating the network. The network is hard-coded for two hidden layers. Neural networks with three or more layers are very rare, but if you want to create a network with more layers you can do it easily by using the structure presented in this article. The input-to-layer-A weights are stored in matrix iaWeights, the layer-A-to-layer-B weights are stored in matrix abWeights, and the layer-B-to-output weights are stored in matrix boWeights. Since a multidimensional array can only be static or dynamic in the first dimension—with all further dimensions being static—the size of the matrix is declared as a constant variable using “#define” statement. I removed all using statements except the one that references the top-level System namespace to save space. You can find the complete source code in the attachments of the article.
Program structure:
#define SIZEI 4 #define SIZEA 5 #define SIZEB 3 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class DeepNeuralNetwork { private: int numInput; int numHiddenA; int numHiddenB; int numOutput; double inputs[]; double iaWeights[][SIZEI]; double abWeights[][SIZEA]; double boWeights[][SIZEB]; double aBiases[]; double bBiases[]; double oBiases[]; double aOutputs[]; double bOutputs[]; double outputs[]; public: DeepNeuralNetwork(int _numInput,int _numHiddenA,int _numHiddenB,int _numOutput) {...} void SetWeights(double &weights[]) {...} void ComputeOutputs(double &xValues[],double &yValues[]) {...} double HyperTanFunction(double x) {...} void Softmax(double &oSums[],double &_softOut[]) {...} }; //+------------------------------------------------------------------+
The two hidden layers and the single output layer each have an array of associated bias values, named aBiases, bBiases and oBiases, respectively. The local outputs for the hidden layers are stored in class-scope arrays named aOutputs and bOutputs.
3.2. Computing Deep Neural Network Outputs
Method ComputeOutputs begins by setting up scratch arrays to hold preliminary (before activation) sums. Next, it computes the preliminary sum of weights times the inputs for the layer-A nodes, adds the bias values, then applies the activation function. Then, the layer-B local outputs are computed, using the just-computed layer-A outputs as local inputs and lastly, the final outputs are computed.
void ComputeOutputs(double &xValues[],double &yValues[]) { double aSums[]; // hidden A nodes sums scratch array double bSums[]; // hidden B nodes sums scratch array double oSums[]; // output nodes sums ArrayResize(aSums,numHiddenA); ArrayFill(aSums,0,numHiddenA,0); ArrayResize(bSums,numHiddenB); ArrayFill(bSums,0,numHiddenB,0); ArrayResize(oSums,numOutput); ArrayFill(oSums,0,numOutput,0); int size=ArraySize(xValues); for(int i=0; i<size;++i) // copy x-values to inputs this.inputs[i]=xValues[i]; for(int j=0; j<numHiddenA;++j) // compute sum of (ia) weights * inputs for(int i=0; i<numInput;++i) aSums[j]+=this.inputs[i]*this.iaWeights[i][j]; // note += for(int i=0; i<numHiddenA;++i) // add biases to a sums aSums[i]+=this.aBiases[i]; for(int i=0; i<numHiddenA;++i) // apply activation this.aOutputs[i]=HyperTanFunction(aSums[i]); // hard-coded for(int j=0; j<numHiddenB;++j) // compute sum of (ab) weights * a outputs = local inputs for(int i=0; i<numHiddenA;++i) bSums[j]+=aOutputs[i]*this.abWeights[i][j]; // note += for(int i=0; i<numHiddenB;++i) // add biases to b sums bSums[i]+=this.bBiases[i]; for(int i=0; i<numHiddenB;++i) // apply activation this.bOutputs[i]=HyperTanFunction(bSums[i]); // hard-coded for(int j=0; j<numOutput;++j) // compute sum of (bo) weights * b outputs = local inputs for(int i=0; i<numHiddenB;++i) oSums[j]+=bOutputs[i]*boWeights[i][j]; for(int i=0; i<numOutput;++i) // add biases to input-to-hidden sums oSums[i]+=oBiases[i]; double softOut[]; Softmax(oSums,softOut); // softmax activation does all outputs at once for efficiency ArrayCopy(outputs,softOut); ArrayCopy(yValues,this.outputs); }
Behind the scenes, the neural network uses the hyperbolic tangent activation function (Tan-h) when computing the outputs of the two hidden layers, and the Softmax activation function when computing the final output values.
- Hyperbolic Tangent(Tan-h): Like the logistic Sigmoid, the Tan-h function is also sigmoidal, but instead outputs values that range (-1, 1). Thus, strongly negative inputs to the Tan-h will map to negative outputs. Additionally, only zero-valued inputs are mapped to near-zero outputs. In this case, I will show the mathematical formula but also its implementation in the MQL source code.
double HyperTanFunction(double x) { if(x<-20.0) return -1.0; // approximation is correct to 30 decimals else if(x > 20.0) return 1.0; else return MathTanh(x); //Use explicit formula for MQL4 (1-exp(-2*x))/(1+exp(-2*x)) }
- Softmax: Assigns decimal probabilities to each class in a case of multiple classes. Those decimal probabilities must add 1.0. This additional restriction allows the training to converge faster.
void Softmax(double &oSums[],double &_softOut[]) { // determine max output sum // does all output nodes at once so scale doesn't have to be re-computed each time int size=ArraySize(oSums); double max= oSums[0]; for(int i = 0; i<size;++i) if(oSums[i]>max) max=oSums[i]; // determine scaling factor -- sum of exp(each val - max) double scale=0.0; for(int i= 0; i<size;++i) scale+= MathExp(oSums[i]-max); ArrayResize(_softOut,size); for(int i=0; i<size;++i) _softOut[i]=MathExp(oSums[i]-max)/scale; }
4. Demo Expert Advisor using the DeepNeuralNetwork Class
Before starting to develop the Expert Advisor we must define the data that will be fed to our Deep Neural Network. Since a neural network is good at classifying patterns, we are going to use the relative values of a Japanese candle as input. These values would be the size of the upper shadow, body, lower shadow and direction of the candle (bullish or bearish). The number of entries does not necessarily have to be small but in this case it will suffice as a test program.
The demo Expert Advisor:
An structure 4-4-5-3 neural network requires a total of (4 * 4) + 4 + (4 * 5) + 5 + (5 * 3) + 3 = 63 weights and bias values.
#include <DeepNeuralNetwork.mqh> int numInput=4; int numHiddenA = 4; int numHiddenB = 5; int numOutput=3; DeepNeuralNetwork dnn(numInput,numHiddenA,numHiddenB,numOutput); //--- weight & bias values input double w0=1.0; input double w1=1.0; input double w2=1.0; input double w3=1.0; input double w4=1.0; input double w5=1.0; input double w6=1.0; input double w7=1.0; input double w8=1.0; input double w9=1.0; input double w10=1.0; input double w11=1.0; input double w12=1.0; input double w13=1.0; input double w14=1.0; input double w15=1.0; input double b0=1.0; input double b1=1.0; input double b2=1.0; input double b3=1.0; input double w40=1.0; input double w41=1.0; input double w42=1.0; input double w43=1.0; input double w44=1.0; input double w45=1.0; input double w46=1.0; input double w47=1.0; input double w48=1.0; input double w49=1.0; input double w50=1.0; input double w51=1.0; input double w52=1.0; input double w53=1.0; input double w54=1.0; input double w55=1.0; input double w56=1.0; input double w57=1.0; input double w58=1.0; input double w59=1.0; input double b4=1.0; input double b5=1.0; input double b6=1.0; input double b7=1.0; input double b8=1.0; input double w60=1.0; input double w61=1.0; input double w62=1.0; input double w63=1.0; input double w64=1.0; input double w65=1.0; input double w66=1.0; input double w67=1.0; input double w68=1.0; input double w69=1.0; input double w70=1.0; input double w71=1.0; input double w72=1.0; input double w73=1.0; input double w74=1.0; input double b9=1.0; input double b10=1.0; input double b11=1.0;
For inputs for our neural network we will use the following formula to determine which percentage represents each part of the candle, respecting the total of its size.
//+------------------------------------------------------------------+ //|percentage of each part of the candle respecting total size | //+------------------------------------------------------------------+ int CandlePatterns(double high,double low,double open,double close,double uod,double &xInputs[]) { double p100=high-low;//Total candle size double highPer=0; double lowPer=0; double bodyPer=0; double trend=0; if(uod>0) { highPer=high-close; lowPer=open-low; bodyPer=close-open; trend=1; } else { highPer=high-open; lowPer=close-low; bodyPer=open-close; trend=0; } if(p100==0)return(-1); xInputs[0]=highPer/p100; xInputs[1]=lowPer/p100; xInputs[2]=bodyPer/p100; xInputs[3]=trend; return(1); }
Now we can process the inputs through our neural network:
MqlRates rates[]; ArraySetAsSeries(rates,true); int copied=CopyRates(_Symbol,0,1,5,rates); //Compute the percent of the upper shadow, lower shadow and body in base of sum 100% int error=CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues); if(error<0)return; dnn.SetWeights(weight); double yValues[]; dnn.ComputeOutputs(_xValues,yValues);
Now the trading opportunity is processed-based on the neural network calculation. Remember, the Softmax function will produce 3 outputs based on the sum of 100%. The values are stored on the array “yValues” and the value with a number higher than 60% will be executed.
//--- if the output value of the neuron is mare than 60% if(yValues[0]>0.6) { if(m_Position.Select(my_symbol))//check if there is an open position { if(m_Position.PositionType()==POSITION_TYPE_SELL) m_Trade.PositionClose(my_symbol);//Close the opposite position if exists if(m_Position.PositionType()==POSITION_TYPE_BUY) return; } m_Trade.Buy(lot_size,my_symbol);//open a Long position } //--- if the output value of the neuron is mare than 60% if(yValues[1]>0.6) { if(m_Position.Select(my_symbol))//check if there is an open position { if(m_Position.PositionType()==POSITION_TYPE_BUY) m_Trade.PositionClose(my_symbol);//Close the opposite position if exists if(m_Position.PositionType()==POSITION_TYPE_SELL) return; } m_Trade.Sell(lot_size,my_symbol);//open a Short position } if(yValues[2]>0.6) { m_Trade.PositionClose(my_symbol);//close any position }
5. Training the Deep Neural Network using strategy optimization
As you may have noticed, only the deep neural network feed-forward mechanism has been implemented, and it doesn’t perform any training. This task is reserved for the strategy tester. Below, I show you how to train the neural network. Keep in mind, that due to a large number of inputs and the range of training parameters, it can only be trained in MetaTrader 5, but once the values of the optimization are obtained, it can easily be copied to MetaTrader 4.
The Strategy Tester configuration:
The weights and bias can use a range of numbers for training, from -1 to 1 and a step of 0.1, 0.01 or 0.001. You can try these values and see which one gets the best result. In my case, I have used 0.001 for the step as shown in the image below:
Please note that I have used “Open Prices Only” because I’m using the last closed candle, so it’s not worth running it on every tick. Now I’ve been running the optimization on H4 time frame and for the last year I got this result on backtest:
Conclusion
The code and explanation presented in this article should give you a good basis for understanding neural networks with two hidden layers. What about three or more hidden layers? The consensus in research literature is that two hidden layers is sufficient for almost all practical problems. This article outlines an approach for developing improved models for exchange rate prediction using Deep Neural Networks, motivated by the ability of deep networks to learn abstract features from raw data. Preliminary results confirm that our deep network produces significantly higher predictive accuracy than the baseline models for developed currency markets.
Good partner program https://shorturl.fm/m8ueY
Very good https://shorturl.fm/TbTre
Cool partnership https://shorturl.fm/a0B2m
Very good partnership https://shorturl.fm/68Y8V
Good partner program https://shorturl.fm/m8ueY
Good partner program https://shorturl.fm/m8ueY
Good partner program https://shorturl.fm/m8ueY
https://shorturl.fm/oYjg5
https://shorturl.fm/6539m
https://shorturl.fm/68Y8V
https://shorturl.fm/6539m
https://shorturl.fm/9fnIC
https://shorturl.fm/YvSxU
https://shorturl.fm/m8ueY
https://shorturl.fm/5JO3e
https://shorturl.fm/5JO3e
https://shorturl.fm/j3kEj
https://shorturl.fm/6539m
https://shorturl.fm/5JO3e
https://shorturl.fm/68Y8V
https://shorturl.fm/9fnIC
https://shorturl.fm/A5ni8
https://shorturl.fm/TbTre
https://shorturl.fm/a0B2m
https://shorturl.fm/A5ni8
https://shorturl.fm/A5ni8
https://shorturl.fm/PFOiP
https://shorturl.fm/VeYJe
https://shorturl.fm/IPXDm
https://shorturl.fm/LdPUr
https://shorturl.fm/MVjF1
https://shorturl.fm/LdPUr
https://shorturl.fm/fSv4z
https://shorturl.fm/TDuGJ
https://shorturl.fm/0EtO1
https://shorturl.fm/I3T8M
https://shorturl.fm/IPXDm
https://shorturl.fm/I3T8M
Эта статья предлагает уникальную подборку занимательных фактов и необычных историй, которые вы, возможно, не знали. Мы постараемся вдохновить ваше воображение и разнообразить ваш кругозор, погружая вас в мир, полный интересных открытий. Читайте и открывайте для себя новое!
Ознакомиться с деталями – https://vyvod-iz-zapoya-1.ru/
Your network, your earnings—apply to our affiliate program now! https://shorturl.fm/wECTG
Turn your network into income—apply to our affiliate program! https://shorturl.fm/vLVyO
Maximize your income with our high-converting offers—join as an affiliate! https://shorturl.fm/hE2qL
Unlock exclusive rewards with every referral—apply to our affiliate program now! https://shorturl.fm/fiThv
Share our products and watch your earnings grow—join our affiliate program! https://shorturl.fm/gnSo4
Unlock exclusive rewards with every referral—enroll now! https://shorturl.fm/VRzgj
Partner with us for generous payouts—sign up today! https://shorturl.fm/yysT6
Join our affiliate program and watch your earnings skyrocket—sign up now! https://shorturl.fm/j9r3F
Partner with us and earn recurring commissions—join the affiliate program! https://shorturl.fm/w4ZzR
Turn your traffic into cash—join our affiliate program! https://shorturl.fm/2A6Uf
Tap into unlimited earnings—sign up for our affiliate program! https://shorturl.fm/LcRNy
Share our link, earn real money—signup for our affiliate program! https://shorturl.fm/ogxHs
Share your link, earn rewards—sign up for our affiliate program! https://shorturl.fm/la1aE
Join our affiliate program today and start earning up to 30% commission—sign up now! https://shorturl.fm/DNggK
Earn passive income with every click—sign up today! https://shorturl.fm/Gm6lb
Boost your earnings effortlessly—become our affiliate! https://shorturl.fm/4ydK6
Monetize your audience—become an affiliate partner now! https://shorturl.fm/3cENA
Become our partner and turn referrals into revenue—join now! https://shorturl.fm/NbYml
Share our link, earn real money—signup for our affiliate program! https://shorturl.fm/BEaP3
Share your link and rake in rewards—join our affiliate team! https://shorturl.fm/8N5Rs
Your audience, your profits—become an affiliate today! https://shorturl.fm/LB3aP
Refer friends, earn cash—sign up now! https://shorturl.fm/WXbJa
Refer friends, collect commissions—sign up now! https://shorturl.fm/X3zVx
Become our partner and turn referrals into revenue—join now! https://shorturl.fm/Is5V2
Earn recurring commissions with each referral—enroll today! https://shorturl.fm/LF4CT
Unlock exclusive rewards with every referral—enroll now! https://shorturl.fm/ucPqc
Share our offers and watch your wallet grow—become an affiliate! https://shorturl.fm/NblsM
Maximize your earnings with top-tier offers—apply now! https://shorturl.fm/6bYmF
Refer and earn up to 50% commission—join now! https://shorturl.fm/5kK2Y
Earn passive income this month—become an affiliate partner and get paid! https://shorturl.fm/nWZOx
Turn your network into income—apply to our affiliate program! https://shorturl.fm/zPRqL
Start sharing, start earning—become our affiliate today! https://shorturl.fm/z0eZ1
Join our affiliate community and maximize your profits—sign up now! https://shorturl.fm/QvgwE
Your influence, your income—join our affiliate network today! https://shorturl.fm/SFene
Be rewarded for every click—join our affiliate program today! https://shorturl.fm/ngAIU
Join our affiliate community and maximize your profits—sign up now! https://shorturl.fm/S4ykT
Посетите наше [url=https://online-casino-ng.com/]онлайн казино в Нигерии, где вы найдете захватывающие online casino[/url] и шанс выиграть реальные деньги!
Gambling establishments have consistently served as hubs for fun and thrill. Individuals enter these establishments hoping for wealth, amusement, and camaraderie.
The range of games available at casinos is extensive and varied. From classic card games like poker and blackjack to modern slot machines, there is something for everyone.
The ambiance of casinos plays a crucial role in elevating the gaming experience. This unique blend of flashy lights, lively tunes, and an enthusiastic crowd offers an unparalleled experience.
Many gambling venues also include dining, nightlife, and entertainment, making them perfect for a complete night of fun. The fusion of gaming and recreational amenities draws in a diverse crowd.
Become our partner and turn referrals into revenue—join now! https://shorturl.fm/xEdYb
Unlock exclusive rewards with every referral—apply to our affiliate program now! https://shorturl.fm/CNMy9
Join our affiliate community and start earning instantly! https://shorturl.fm/t9euW
Join our affiliate community and maximize your profits—sign up now! https://shorturl.fm/Xbb9Y
Посетите наше онлайн казино в Нигерии, где вы найдете захватывающие online casino и шанс выиграть реальные деньги!
Casinos are renowned for providing a vibrant atmosphere filled with entertainment. Individuals enter these establishments hoping for wealth, amusement, and camaraderie.
The range of games available at casinos is extensive and varied. Whether it’s traditional games such as poker and blackjack or contemporary slot machines, there’s an option for every player.
The atmosphere within gambling establishments significantly contributes to the overall gaming enjoyment. The combination of bright lights, upbeat music, and a vibrant crowd creates an unmatched experience.
Casinos frequently host eateries, bars, and show options, transforming them into a comprehensive entertainment destination. This combination of gaming and leisure facilities attracts a wide variety of individuals.
Refer friends, collect commissions—sign up now! https://shorturl.fm/HFNmc
Be rewarded for every click—join our affiliate program today! https://shorturl.fm/l9wRw
Start profiting from your traffic—sign up today! https://shorturl.fm/Ot6gQ
Start earning every time someone clicks—join now! https://shorturl.fm/2cam4
Be rewarded for every click—join our affiliate program today! https://shorturl.fm/k1Uco
Earn passive income this month—become an affiliate partner and get paid! https://shorturl.fm/HDwFa
Start profiting from your network—sign up today! https://shorturl.fm/afai7
https://shorturl.fm/n5tvH
https://shorturl.fm/M0wu5
https://shorturl.fm/jDpSJ
https://shorturl.fm/mZThu
https://shorturl.fm/yGa86
https://shorturl.fm/xTVMR
https://shorturl.fm/92g2o
https://shorturl.fm/BLICy
https://shorturl.fm/kjatN
https://shorturl.fm/AsVKX
https://shorturl.fm/MQW66
https://shorturl.fm/fj7Op
https://shorturl.fm/5XjLq
https://shorturl.fm/Lpdhb
https://shorturl.fm/LrlPU
https://shorturl.fm/tad7k
https://shorturl.fm/ccQNl
https://shorturl.fm/LBZ4I
https://shorturl.fm/ZB8QB
https://shorturl.fm/wzIGc
https://shorturl.fm/iJN1W
https://shorturl.fm/PReTb
https://shorturl.fm/oWDsf
https://shorturl.fm/me2Mi
https://shorturl.fm/r52gB
https://shorturl.fm/RPoAK
x387ab
https://shorturl.fm/EbqgP
https://shorturl.fm/6F7GY
https://shorturl.fm/2V2xE
https://shorturl.fm/57BsE
https://shorturl.fm/2L7yf
https://shorturl.fm/nLOiV
https://shorturl.fm/K2LuO
https://shorturl.fm/XTd8e
https://shorturl.fm/8dAsT
https://shorturl.fm/Z07gP
https://shorturl.fm/5yyKG
https://shorturl.fm/02pzc
https://shorturl.fm/hBffN
https://shorturl.fm/rVcDw
https://shorturl.fm/sYl4S
https://shorturl.fm/tqzEv
uhgogc
https://shorturl.fm/0fOl9
https://shorturl.fm/w6j2V
https://shorturl.fm/89uK8
https://shorturl.fm/3zonM
https://shorturl.fm/M171F
https://shorturl.fm/j4WKK
https://shorturl.fm/3nJJ2
https://shorturl.fm/mggsh
https://shorturl.fm/SIEde
https://shorturl.fm/G5NXC
https://shorturl.fm/Ig2ny
https://shorturl.fm/KjRVA
https://shorturl.fm/pWouG
https://shorturl.fm/1vt9w
https://shorturl.fm/ceUW1
https://shorturl.fm/eE3Po
https://shorturl.fm/ZC0Nr
https://shorturl.fm/VucUT
https://shorturl.fm/211RI
https://shorturl.fm/p7kK2
https://shorturl.fm/HoD45
https://shorturl.fm/NjMwb
https://shorturl.fm/DiNsT
https://shorturl.fm/CkkRq
https://shorturl.fm/o7ap2
https://shorturl.fm/7sEsR
y41t4q
https://shorturl.fm/HSNeY
https://shorturl.fm/tHK6R
https://shorturl.fm/rd37f
0xh390
https://shorturl.fm/Ww5az
https://shorturl.fm/4k5lB
https://shorturl.fm/KxrEV
https://shorturl.fm/1KwYx
https://shorturl.fm/2GZ6l
ремонт кофемашины поларис ремонт кофемашин melitta
ремонт швейных машин недорого https://remont-shveynyh-mashin1.ru
аренда 1с в облаке цена 1с облако личный кабинет вход
https://shorturl.fm/YNEut
https://shorturl.fm/1ZhwG
https://shorturl.fm/Qhtr4
https://shorturl.fm/qTsrM
https://shorturl.fm/EzQL1
https://shorturl.fm/S0XDs
Увеличьте свою аудиторию с помощью просмотры ютуб!
Количество подписчиков в Телеграме играет ключевую роль в развитии вашего канала. Умение привлекать и удерживать подписчиков важно для роста и популярности вашего Телеграм-канала.
Качественный контент — это первый шаг, который поможет вам увеличить число подписчиков в Телеграме. Люди не будут подписываться на канал, если не найдут там ничего полезного или интересного.
Рекламные мероприятия могут помочь в быстром увеличении числа подписчиков. Вы можете использовать различные платформы для продвижения своего канала, включая социальные сети.
Активное взаимодействие с подписчиками помогает удерживать их интерес и привлекать новых. Задавайте вопросы и проводите опросы для улучшения понимания потребностей вашей аудитории.
https://shorturl.fm/8QFXI
спросить адвоката онлайн бесплатная помощь юриста без регистрации
Нужны пластиковые окна: пластиковые окна недорого
Нужен вентилируемый фасад: https://podsistema-dlya-ventfasada.ru
https://shorturl.fm/gegWB
https://shorturl.fm/xTlgs
https://shorturl.fm/V3F8T
https://shorturl.fm/dyVaq
https://shorturl.fm/aQfkX
freight shipping ny nyc package delivery
https://shorturl.fm/2eyQz
https://shorturl.fm/3bkzo
https://shorturl.fm/FUfWn
https://shorturl.fm/LCjxE
https://shorturl.fm/AIYuc
https://shorturl.fm/7hQLE
https://shorturl.fm/STRx2
nyc package delivery nyc package delivery
https://shorturl.fm/8A1qA
ttjfe4
https://shorturl.fm/5UJ0r
https://shorturl.fm/ESiwc
https://shorturl.fm/CItsp
https://shorturl.fm/Wd9rq
GMO Gaika Reputation – Pros, Cons, and the Truth About Withdrawal Refusals
GMO Gaika is widely used by both beginners and experienced FX traders. Its popularity stems from easy-to-use trading tools, stable spreads, and a high level of trust due to its operation by a major Japanese company. Many users feel secure thanks to this strong domestic backing.
On the other hand, there are some online rumors about “withdrawal refusals,” but in most cases, these are due to violations of terms or incomplete identity verification. GMO Gaika’s transparent response to such issues suggests that serious problems are not a frequent occurrence.
You can find more detailed insights into the pros and cons of GMO Gaika, as well as real user experiences, on the trusted investment site naughty-cao.jp. If you’re considering opening an account, it’s a good idea to review this information beforehand.
https://shorturl.fm/GS4UW
zpvzzh
https://shorturl.fm/pZ0X0
Хотите освоить SEO? Блог seo-sajta.ru: теория и практика, оптимизация контента, юзабилити, ссылки, аналитика. Получите навыки, которые помогут вывести сайты в ТОП.
Нужна топливная карта? https://avtobas40.ru. Экономия до 15%, автоматическая отчётность, удобные безналичные расчёты и контроль автопарка онлайн.
Хотите оформить карту на топливо? топливные карты для юр лиц. Контроль за каждой транзакцией, отчёты для бухгалтерии, гибкие лимиты и бонусные программы.
https://shorturl.fm/vfXcC
оценить ооо для продажи оценочная компания официальный сайт
https://shorturl.fm/VqvCJ
https://shorturl.fm/rHp1Z
мягкая плоская кровля https://montazh-ploskoj-krovli.ru
Создать документы онлайн конструктор договора дарения: создайте договор, заявление или акт за 5 минут. Простая форма, готовые шаблоны, юридическая точность и возможность скачать в нужном формате.
https://shorturl.fm/jPoVI
Откройте для себя мир комфорта с автоматическими рулонными шторами с электроприводом, которые идеально подходят для создания уюта в вашем доме.
Рулонные шторы с автоматизированным управлением — это удобное и стильное решение для современных интерьеров. Использование рулонных штор с электроприводом делает интерьер более функциональным и эстетичным.
Преимущества использования электропривода очевидны . Первым и, пожалуй, самым важным плюсом является возможность дальнего управления шторами . Во-вторых, электроника позволяет настраивать режим работы штор в зависимости от времени суток .
Электрические рулонные шторы подойдут для любого типа помещений. Их часто устанавливают в спальнях, гостиных и офисах . Важно учитывать, что для установки требуется электропитание .
При выборе таких штор стоит учитывать их стиль и качество материалов . Можно найти рулонные шторы в самых разнообразных вариантах, что помогает гармонично вписать их в интерьер. Также следует учитывать, что многие компании предоставляют услуги по индивидуальному заказу штор .
vps hosting server rental vps hosting
стул для косметолога тумба для косметолога
Рулонные шторы блэкаут с электроприводом идеально подойдут для создания уюта и контроля освещения в вашем доме.
Рулонные шторы блэкаут с электроприводом являются. Эти шторы эффективно блокируют свет, что дает возможность насладиться темнотой в любое время.
легкость в эксплуатации. Вы можете управлять шторами с помощью пульта дистанционного управления, что делает шторы удобными для любого типа помещения.
Также, установка рулонных штор блэкаут не требует особых навыков. Вы можете выбрать между различными методами установки. Это позволяет адаптировать шторы под любой тип окон.
Следует учитывать, что рулонные шторы с блэкаутом и электроприводом предлагают. Это поможет вам сохранить тепло в холодное время года. В конечном итоге, такие рулонные шторы обеспечивают стильный вид и практичность для вашего дома.
https://shorturl.fm/gGTuh
Рулонные шторы с аккумулятором предоставляют удобство и стиль для любого интерьера, позволяя легко управлять светом и обеспечивая полную свободу от проводов.
Одним из основных преимуществ таких штор является их удобство.
Преобразите ваше пространство с помощью автоматических рулонных штор, которые идеально сочетают стиль и современность.
Рулонные шторы с дистанционным управлением становятся все более популярными в современных интерьерах. Такие шторы обеспечивают как комфорт, так и стильный вид, что делает их прекрасным решением для любого пространства.
Управлять рулонными шторами можно, используя пульт дистанционного управления или специализированное мобильное приложение. Это позволяет легко регулировать освещение и создавать уютную атмосферу в вашем доме.
Помимо этого, рулонные шторы представлены в множестве дизайнов и цветовых вариантах. Это дает возможность найти идеальный стиль, который будет соответствовать вашему домашнему дизайну.
Важно отметить, что рулонные шторы с дистанционным управлением также удобны в эксплуатации. Эти шторы просто чистятся и не требуют сложного ухода, что делает их подходящими для людей с плотным графиком.
Приобретите шторы для умного дома и насладитесь комфортом и современными технологиями в своем доме.
Умные рулонные шторы с электроприводом — это удобное и практичное решение для вашего дома. Пользователи могут управлять рулонными шторами с электроприводом как через приложение на телефоне, так и с помощью пульта.
Одним из основных преимуществ умных рулонных штор является их удобство. С помощью одного нажатия кнопки вы можете регулировать свет и тень в вашем помещении.
Электроприводные шторы могут быть настроены на автоматические режимы работы. Настройка автоматического режима работы штор позволяет вам не беспокоиться о их управлении.
Кроме того, умные рулонные шторы могут быть интегрированы с системой “умный дом”. Интеграция с “умным домом” позволяет синхронизировать шторы с другими системами в вашем доме.
https://shorturl.fm/h1DWt
бетон саратов купить бетон
Хотите заказать джингл? Индивидуальная разработка музыкальных заставок для рекламы, подкастов и презентаций. Качественный звук и креатив для запоминающегося бренда.
Рулонные шторы блэкаут с электроприводом идеально подойдут для создания уюта и контроля освещения в вашем доме.
Рулонные шторы с эффектом блэкаут и электроприводом – это. Эти шторы эффективно блокируют свет, что позволяет создать темную обстановку в любое время суток.
легкость в эксплуатации. С помощью пульта можно легко управлять такими шторами, что делает их идеальными для современных интерьеров.
Кроме того, рулонные шторы с эффектом блэкаут просто монтируются. Вы можете выбрать между различными методами установки. Такое разнообразие дает возможность подобрать шторы для любых оконных конструкций.
Следует учитывать, что рулонные шторы с блэкаутом и электроприводом предлагают. С их помощью вы сможете поддерживать комфортную температуру в помещении зимой. В итоге, рулонные шторы с блэкаутом и электроприводом станут не только эстетичным, но и функциональным решением.
Добрый день!
Долго анализировал как поднять сайт и свои проекты и нарастить DR и узнал от крутых seo,
энтузиастов ребят, именно они разработали недорогой и главное top прогон Xrumer – https://www.bing.com/search?q=bullet+%D0%BF%D1%80%D0%BE%D0%B3%D0%BE%D0%BD
Xrumer 2025: советы по настройке помогают использовать программу эффективно. Правильные параметры ускоряют прогон ссылок. Это повышает DR и авторитет сайта. Советы опытных специалистов упрощают работу. Xrumer 2025: советы по настройке – ценный ресурс для SEO.
seo url pro opencart 3, продвижение официальный сайт москва, линкбилдинг начать
Линкбилдинг для повышения DR, разработка сайтов интернет продвижение, как продвижении сайтов
!!Удачи и роста в топах!!
Puzzle Man Pro https://apps.apple.com/mn/app/puzzle-man-pro/id455696756 exciting puzzles for iOS. Collect classic pictures or create puzzles from your own photos. Different difficulty levels, user-friendly interface and saving progress.
Свежее и интересное: https://smartbb.ru/viewtopic.php?t=465
Стройкаталог https://stroycata1og.ru проекты коттеджей, дома любой площади, каталог стройматериалов. Комплексные услуги от проектирования до сдачи объекта с гарантией качества.
https://shorturl.fm/eyvEA
Block Puzzle Wood Classic https://apps.apple.com/id/app/puzzle-quest-flip/id6740150076 is a puzzle game where you need to correctly place wooden blocks. Simple controls, beautiful visuals and addictive gameplay for all ages.
https://shorturl.fm/4fAvF
https://shorturl.fm/kmK0H
Добрый день!
Долго обмозговывал как поднять сайт и свои проекты и нарастить TF trust flow и узнал от друзей профессионалов,
профи ребят, именно они разработали недорогой и главное буст прогон Хрумером – https://www.bing.com/search?q=bullet+%D0%BF%D1%80%D0%BE%D0%B3%D0%BE%D0%BD
Форумный линкбилдинг Хрумер приносит быстрые результаты. Он генерирует тысячи сообщений на площадках с обратными ссылками. Это укрепляет ссылочный профиль и ускоряет рост DR. Такой метод подходит как для новичков, так и для профессионалов. Форумный линкбилдинг Хрумер – эффективный инструмент.
технически seo аудит сайта, seo статьи сайта, Форумный спам для SEO
Автоматический линкбилдинг Xrumer, написать seo, продвижение сайтов рыбинск
!!Удачи и роста в топах!!
https://shorturl.fm/SitcJ
https://shorturl.fm/JZ8lX
https://shorturl.fm/F6hem
https://shorturl.fm/brc8m
https://shorturl.fm/qjQjK
https://shorturl.fm/FHVZY
нтернет-магазин сантехники https://vodomirural.ru ванны, смесители, унитазы, раковины и душевые кабины. Большой выбор, доступные цены, доставка и гарантия качества от производителей.
https://shorturl.fm/NJY8v
Откройте для себя мир комфорта с рулонными шторами с электроприводом, которые идеально подходят для создания уюта в вашем доме.
Рулонные шторы с электроприводом — это удобное и стильное решение для современных интерьеров. Такие шторы помогают создавать комфортную атмосферу в вашем пространстве и защищают от солнечного света .
Электрические шторы имеют множество преимуществ. Первым и, пожалуй, самым важным плюсом является возможность дальнего управления шторами . Во-вторых, электроника позволяет настраивать режим работы штор в зависимости от времени суток .
Монтаж таких штор возможен в любом интерьере . Их активно используют как в жилых, так и в коммерческих помещениях . Следует помнить, что для работы электропривода необходимо подвести электрический кабель.
Фактор выбора материала и дизайна штор также играет важную роль. Шторы могут быть выполнены из различных тканей, что позволяет выбрать наиболее подходящий вариант для вашего интерьера . Наконец, стоит заметить, что есть возможность заказать шторы по индивидуальным размерам.
https://shorturl.fm/57q0h
Приобретите купить автоматические рулонные шторы и насладитесь комфортом и современными технологиями в своем доме.
Умные рулонные шторы с электроприводом — это удобное и практичное решение для вашего дома. Эти шторы легко управляются с помощью смартфона или пульта дистанционного управления.
Умные рулонные шторы обладают рядом преимуществ, среди которых удобство управления. Вы можете настраивать их положение в любое время, не вставая с дивана.
Кроме того, эти изделия могут работать в режиме автоматизации. Вы можете задать время, когда шторы должны открываться и закрываться, что делает их особенно удобными.
Кроме того, умные рулонные шторы могут быть интегрированы с системой “умный дом”. Таким образом, шторы могут работать в связке с другими устройствами, что делает ваш дом более умным и адаптивным.
Преобразите ваше пространство с помощью автоматических рулонных штор, которые идеально сочетают стиль и современность.
Рулонные шторы с дистанционным управлением становятся все более популярными в современных интерьерах. Данные изделия соединяют в себе удобство и эстетичность, что делает их идеальным выбором для различных помещений.
Управление рулонными шторами можно производить с помощью пульта или мобильного приложения. Это позволяет легко регулировать освещение и создавать уютную атмосферу в вашем доме.
Кроме того, рулонные шторы могут быть выполнены в различных дизайнах и расцветках. Это позволит вам подобрать идеальный вариант, который будет гармонировать с вашим интерьером.
Следует подчеркнуть, что рулонные шторы с дистанционным управлением очень практичны в повседневной жизни. Их просто поддерживать в чистоте, и они не требуют сложного ухода, что идеально подходит для занятых людей.
буксик
Закажите бетаметадол прямо сейчас и получите скидку.
Преобразите ваше пространство с помощью рулонных штор с дистанционным управлением, которые идеально сочетают стиль и современность.
Рулонные шторы с дистанционным управлением становятся все более популярными в современных интерьерах. Эти шторы предлагают удобство и стиль, что делает их отличным решением для любого помещения.
Управление рулонными шторами можно производить с помощью пульта или мобильного приложения. Таким образом, вы можете быстро изменять уровень освещенности и создавать комфортную обстановку в своем жилище.
Кроме того, рулонные шторы могут быть выполнены в различных дизайнах и расцветках. Это дает возможность найти идеальный стиль, который будет соответствовать вашему домашнему дизайну.
Не стоит забывать, что дистанционно управляемые рулонные шторы очень удобны в использовании. Их просто поддерживать в чистоте, и они не требуют сложного ухода, что идеально подходит для занятых людей.
https://shorturl.fm/bHV1z
Рулонные шторы с аккумулятором предоставляют удобство и стиль для любого интерьера, позволяя легко управлять светом и обеспечивая полную свободу от проводов.
Их главные достоинства — это функциональность, стиль и простота в использовании.
Рейтинг хостингов топ хостингов для сайта подбор сервисов для сайтов и интернет-магазинов. Сравнение тарифов, гарантия стабильности и рекомендации по выбору.
https://shorturl.fm/Gzw2l
edb4sv
https://shorturl.fm/7CJS5
https://shorturl.fm/Fj1wY
https://shorturl.fm/cRVMP
https://shorturl.fm/sRGlI
PuzzleFree online puzzles https://thebossmagazine.com/post/logic-puzzles-crossword-language-learning-how-brain-games-help-education/ hundreds of pictures to assemble, different difficulty levels and user-friendly interface. Enjoy the process, train your memory and attention for free.
https://shorturl.fm/6pIw8
https://shorturl.fm/qYGcx
https://shorturl.fm/HUjqX
https://shorturl.fm/KtRP0
Наружная реклама https://pioner-reklama.ru и вывески под ключ: дизайн, производство и монтаж. Световые короба, объёмные буквы, баннеры и витрины. Индивидуальные решения для бизнеса любого масштаба.
Цены на ремонт https://remontkomand.kz/ru/price квартир и помещений в Алматы под ключ. Узнайте точные расценки на все виды работ — от демонтажа до чистовой отделки. Посчитайте стоимость своего ремонта заранее и убедитесь в нашей прозрачности. Никаких «сюрпризов» в итоговой смете!
https://shorturl.fm/heNGg
https://shorturl.fm/dVv6N
https://shorturl.fm/oRqRw
Планируете ремонт https://remontkomand.kz в Алматы и боитесь скрытых платежей? Опубликовали полный и честный прайс-лист! Узнайте точные расценки на все виды работ — от демонтажа до чистовой отделки. Посчитайте стоимость своего ремонта заранее и убедитесь в нашей прозрачности. Никаких «сюрпризов» в итоговой смете!
Онлайн-курсы слив обучающих курсов бесплатно. Изучайте языки, IT, дизайн, маркетинг и другие направления. Удобный формат, доступ к материалам 24/7
https://shorturl.fm/v6yeh
https://shorturl.fm/Pxv2L